Yii2 GridView显示来自多个表的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2 GridView显示来自多个表的数据相关的知识,希望对你有一定的参考价值。
我有3张桌子:product
,field
和product_field
。产品领域有2个外键:product_id
和field_id
;
一个product
有很多product_field
s
一个field
有很多product_field
s
一个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的值。
有人能告诉我如何实现这一目标吗?
答案
您应该检查以下内容,以便它可以工作:
- 该产品有许多
product_field
所以product_field
的数据应该在产品视图行动ex:/product/1
下可见 - 在
view
的ProductController
动作中,您拥有当前产品的ID,因此您可以执行以下操作:$productFieldSearchModel=new ProductFieldSearch(); $productFieldSearchModel->product_id=$productId; $dataProvider = $productFieldSearchModel->search(Yii::$app->request->queryParams);
- 现在您可以将产品顶部及其下方的
DetailView
传递到渲染视图,您可以将GridView
用于此特定项目的产品字段
以上是关于Yii2 GridView显示来自多个表的数据的主要内容,如果未能解决你的问题,请参考以下文章
Yii2 gridview过滤来自多个值的列表(不是下拉列表过滤器)