Php Yii2 GridView显示来自多个表的数据
我有三个表:Php Yii2 GridView显示来自多个表的数据,php,gridview,yii,yii2,Php,Gridview,Yii,Yii2,我有三个表:产品、字段和产品字段。 产品字段有两个外键:product_id和field_id 产品有许多产品字段 一个字段有许多产品字段 product\u字段有一个product和一个字段 product表包含一个id和一个名称(例如“book”)。 字段表包含id和名称(例如“ean代码”) product_字段表包含一个id、一个product_id、一个field_id和一个值(例如“19886431”) GII生成的ActiveRecord模型中存在每个表的关系 我的控制器操作如下所
产品
、字段
和产品字段
。
产品字段有两个外键:product_id
和field_id
产品
有许多产品字段
一个字段
有许多产品字段
product\u字段
有一个product
和一个字段
product
表包含一个id和一个名称(例如“book”)。
字段
表包含id和名称(例如“ean代码”)
product_字段
表包含一个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,
]);
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;
}
productSearchModel中的My search()函数如下所示:
$producSearchModel = new ProductSearch();
$params = Yii::$app->request->queryParams;
$productDataProvider = $productSearchModel->search($params);
return $this->render('index', [
'productSearchModel' => $productSearchModel,
'productDataProvider' => $productDataProvider,
]);
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行和所有字段,这正是它应该做的
我想显示的是一列字段的名称,以及每行的值from product_字段
它应该是什么样子的:
有人能告诉我如何做到这一点吗?你应该检查以下内容,这样它才能工作:
- 产品有许多
,因此product\u字段
的数据应该在产品视图操作下可见,例如:product\u字段
/product/1
- 在
的ProductController
操作中,您拥有当前产品的ID,因此可以执行以下操作:视图
$productFieldSearchModel=new ProductFieldSearch(); $productFieldSearchModel->product_id=$productId; $dataProvider = $productFieldSearchModel->search(Yii::$app->request->queryParams);
- 现在,您可以通过产品顶部和顶部的
传递到渲染视图 在其下方,您可以看到此特定项目的产品字段的DetailView
GridView