Как искать похожие значения в Yii2?
У меня следующая ситуация в Yii2:
- Модель проекта
- CustomField, определяющий тип настраиваемого поля и следует ли его применять к проектам (другие варианты - сотрудники и компании)
- CustomFieldContent, связанный как с сущностью (в данном случае с проектом), так и с типом настраиваемого поля
Итак, пример:
Project with id 1
CustomField with id 2
CustomFieldContent with entityId = 1, type = 'project', customFieldId = 2 and value = 'test'
Теперь отображение пользовательского контента для каждого проекта в виде сетки Yii не представляет проблем. Но я хочу сделать его доступным для поиска и сортировки. Поэтому мне нужно добавить имя настраиваемого поля в качестве атрибута для ProjectSearch. Это, однако, не может быть сделано, так как Yii не поддерживает динамические атрибуты.
Есть идеи, как это сделать?
1 ответ
Для поиска и сортировки контента, я предлагаю вам этот учебник, где вы можете найти полезный образец для сборки того, что вам нужно. (сценарий номер 2 больше соответствует вашим потребностям)
В краткосрочной перспективе вам следует расширить базовую модель, добавив нужное отношение, настроить в собственных функциях searchModel добавление в dataProvider->setSort для поля / отношения и добавить условие where для фильтрации.
ниже краткой выдержки
$dataProvider->setSort([
'attributes' => [
....
'yourRelatedField' => [
'asc' => ['field1' => SORT_ASC, ],
'desc' => ['field1' => SORT_DESC,],
'label' => 'your Laber',
'default' => SORT_ASC
],
]
]);
и расширение условия где для фильтрации.
/* Add your filtering criteria */
// filter CustomFieldContent
$query->joinWith(['table_a' => function ($q) {
$q->where('table_a.CustomFieldContent LIKE "%' . $this->CustomFieldContent . '%" ');
}]);