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

时间:2018-09-06 15:44:59

标签: php gridview yii yii2

我有3个表:productfieldproduct_field。 产品字段具有2个外键:product_idfield_id;

一个product有许多product_field

一个field有许多product_field

一个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

有人可以告诉我如何实现吗?

1 个答案:

答案 0 :(得分:0)

您应检查以下各项,以使其起作用:

  • 该产品有许多product_field,因此product_field的数据应该在产品查看操作下可见,例如:/product/1
  • view的{​​{1}}操作中,您具有当前产品的ID,因此可以执行以下操作:

    ProductController
  • 现在,您可以将传递给具有产品顶部$productFieldSearchModel=new ProductFieldSearch(); $productFieldSearchModel->product_id=$productId; $dataProvider = $productFieldSearchModel->search(Yii::$app->request->queryParams); 和 在它的下方,您可以为该特定商品的产品字段输入DetailView