php - Yii2 - 事件记录中的传递依赖

标签 php mysql activerecord yii2

我有 3 个表。

产品 [ProductId, ProductName], VendorProduct[VPid, ProductId, VPprice], 交易[DealId、VPid、DealPrice]

我想在 GridView 中使用事件记录显示交易。我定义了关系但无法从表 Product 访问 ProductName。

Deals.*、VendorProduct.VPid、Product.ProductName

这就是我想要的结果。 我的 DealsSearch 模型是这样的。

$query = Deals::find()->joinWith(['vendorProduct', 'vendorProduct.product']);

然后我像这样将 $query 传递给 ActiveDataProvider

$dataProvider = new ActiveDataProvider([
   'query' => $query,
]);

我的 GridView 代码:

GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'DealId',
        'VPid',
        'DealPrice',
        [
          'label' => 'Product Name',
          'attribute' => 'vendorProducts.product.ProductName',
        ],
    ],
]);

使用普通的连接查询很简单,但我需要使用 ActiveRecord 类来完成。

编辑:

简而言之,我想要使用 ActiveRecord 进行以下查询的结果。

SELECT Deals.*, VendorProduct.VPid, Product.ProductName
FROM Deals
JOIN VendorProduct ON VendorProduct.VPid = Deals.VPid
JOIN Product ON Product.ProductId = VendorProduct.ProductId;

当我在我的 View 中打印 $model->vendorProduct 时,我得到了以下数组。 (为了便于阅读,我删除了额外的列)。

backend\models\VendorProducts Object
(
    [_attributes:yii\db\BaseActiveRecord:private] => Array
        (
            [VPid] => 3
            [ProductId] => 4175
            [VPprice] => 0
        )
    [_related:yii\db\BaseActiveRecord:private] => Array
        (
            [product] => backend\models\Product Object
                (
                    [_attributes:yii\db\BaseActiveRecord:private] => Array
                        (
                            [ProductId] => 4175
                            [ProductName] => Human Resource Consultancy
                        )

                )

        )

    [_errors:yii\base\Model:private] => 
    [_validators:yii\base\Model:private] => 
    [_scenario:yii\base\Model:private] => default
    [_events:yii\base\Component:private] => Array
        (
        )

    [_behaviors:yii\base\Component:private] => Array
        (
        )

)

最佳答案

GridView

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'vendorProduct.VPprice',
        [
          'label' => 'Product Name',
          'attribute' => 'vendorProduct.product.ProductName',
        ],
    ],
]); ?>

关于php - Yii2 - 事件记录中的传递依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40216058/

相关文章:

PHP:如何将 .txt 文件从 FTP 服务器读取到变量中?

php - 如何将 yyyy mm dd 转换为 Laravel 日期并插入 mysql date() 列

php - ORACLE + PHP oci_execute() 卡住并且不返回任何内容

mysql - 使用 LEFT JOIN 提高性能

php - 如何使用 CodeIgniter 的 Active Record 方法添加 ORDER BY 子句?

php - 正确理解 PHP 中的作用域(与 Javascript 相比)

mysql - Openshift Mysql 5.5 卡带如何访问日志?

mysql - 按截止时间对 MySQL 表进行排序

mysql - MariaDB和MYSQL5.6返回不同的结果

ruby-on-rails - 如果验证失败,Rails 会跳过其他验证