У меня есть 3 таблицы: product
, field
и product_field
.
поле продукта имеет 2 внешних ключа: product_id
и field_id
;
a product
имеет много product_field
s
a field
имеет много product_field
s
a product_field
имеет один product
и один field
таблица product
содержит идентификатор и имя (например, «книга»).
таблица field
содержит идентификатор и имя (например, 'ean-code')
таблица product_field
содержит идентификатор, product_id, field_id и значение (например, '19886431')
отношения для каждой таблицы присутствуют в моделях ActiveRecord, сгенерированных GII.
Мое действие контроллера выглядит так:
$producSearchModel = new ProductSearch();
$params = Yii::$app->request->queryParams;
$productDataProvider = $productSearchModel->search($params);
return $this->render('index', [
'productSearchModel' => $productSearchModel,
'productDataProvider' => $productDataProvider,
]);
Моя функция поиска () в productSearchModel выглядит следующим образом:
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.
Как это должно выглядеть:
Может кто-нибудь сказать мне, как этого добиться?