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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2 GridView显示来自多个表的数据相关的知识,希望对你有一定的参考价值。

我有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

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

答案

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

  • 该产品有许多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用于此特定项目的产品字段

以上是关于Yii2 GridView显示来自多个表的数据的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 gridview过滤来自多个值的列表(不是下拉列表过滤器)

Yii2- 一个 GridView 中来自两个模型的数据

Yii2的Gridview应用技巧补充

Yii2 GridView中显示关联表数据

如何在yii2 gridview中为大数据表显示一行中的表头名称

在使用pjax重新加载gridview后,在gridview上的Yii2模态表单更新没有显示