Допустим, у меня есть таблицы и модели "запись", "категория", "группа".
Отношения:
- запись имеет много категорий (соединение)
- В категории есть много групп
![enter image description here](https://i.stack.imgur.com/bNU5l.png)
Я хочу сделать следующее:
Если есть две категории, и у этих категорий есть несколько групп,Для каждой записи я хочу выбрать группу для каждой категории.Пока здесь нет проблем.
На странице "запись / индекс" в сетке я хотел бы показать и отфильтровать эти группы для каждой категории.
Для этого мне нужнодобавить произвольное количество столбцов (в этом случае это два для двух категорий) в gridview.Это также выполнимо, но фильтрация и сортировка кажется невозможным.
Мой метод поиска:
public $categories;
public function rules()
{
return [
[[..., 'categories'], 'safe'],
];
}
public function search($params)
{
$query = Record::find();
$query->joinWith('recordToRecordCategories');
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder' => ['CreateDate' => SORT_DESC]],
'pagination' => [
'pageSize' => 50,
],
]);
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
.
.
]);
// Here we search the attributes of our relations using our previously configured
// ones in "record_to_record_category"
if (!empty($this->categories)) {
foreach ($this->categories as $category) {
$query->andFilterWhere(['record_to_record_category.record_group_id' => $category]);
}
}
return $dataProvider;
}
В представлении я пробовал этот код:
foreach ($recordCategories as $recordCategory) {
array_push(
$gridColumns,
[
'attribute' => 'categories[' . $recordCategory->id . ']',
'label' => $recordCategory->name,
'value' => function ($model, $key, $index, $column) {
$returnVal = "";
foreach ($model->recordToRecordCategories as $recordToRecordCategory) {
if ($recordToRecordCategory->recordCategory->name == $column->label) {
$returnVal = $recordToRecordCategory->recordGroup->name;
}
}
return $returnVal;
},
'filter' => ArrayHelper::map($recordCategory->getRecordGroups()->asArray()->all(), 'id', 'name'),
'filterInputOptions' => [
'class' => 'form-control',
'prompt' => Yii::t('app', 'All')
],
]
);
}
иэто не работает: (
Что я должен изменить в поисковой модели и индексе.