Yii2 GridView显示来自多个表的数据

问题描述 投票:0回答:1

我有3张桌子:productfieldproduct_field。产品领域有2个外键:product_idfield_id;

一个product有很多product_fields

一个field有很多product_fields

一个product_field有一个product和一个field

product表包含id和名称(例如'book')。 field表包含id和名称(例如'ean-code'),product_field表包含id,product_id,field_id和值(例如'19886431')

每个表的关系存在于GII生成的ActiveRecord模型中。

我的控制器动作如下所示:

$producSearchModel = new ProductSearch();

$params = Yii::$app->request->queryParams;

$productDataProvider = $productSearchModel->search($params);

return $this->render('index', [
  'productSearchModel'   => $productSearchModel,
  'productDataProvider'  => $productDataProvider,
]);

我在productSearchModel中的search()函数如下所示:

public function search($params){

    $query = new Query();
    $query  ->select([ '*', 'field.name as fieldname'])
      ->from('product')
      ->join(   'INNER JOIN',
          'product_field',
        'product_field.product_id = product.id'
      )  ->join(    'INNER JOIN',
        'field',
        'product_field.field_id = field.id'
      );


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

    if (!($this->load($params) && $this->validate())) {
      return $dataProvider;
    }

    return $dataProvider;

}

现在一切看起来很好我的网格列显示了包含所有字段的2行,这正是它应该做的。

我想要显示的是字段名称的列,以及每行中product_field的值。

应该是什么样子:enter image description here

有人能告诉我如何实现这一目标吗?

php gridview yii yii2
1个回答
0
投票

您应该检查以下内容,以便它可以工作:

  • 该产品有许多product_field所以product_field的数据应该在产品视图行动ex:/product/1下可见
  • viewProductController动作中,您拥有当前产品的ID,因此您可以执行以下操作: $productFieldSearchModel=new ProductFieldSearch(); $productFieldSearchModel->product_id=$productId; $dataProvider = $productFieldSearchModel->search(Yii::$app->request->queryParams);
  • 现在您可以将产品顶部及其下方的DetailView传递到渲染视图,您可以将GridView用于此特定项目的产品字段
© www.soinside.com 2019 - 2024. All rights reserved.