Как искать похожие значения в 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 . '%" ');
}]);
Другие вопросы по тегам