我有3个表:product
,field
和product_field
。
产品字段具有2个外键:product_id
和field_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')
关系。
我的控制器动作如下:
$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的值。
有人可以告诉我如何实现吗?
答案 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