Такая проблема возникла с фильтрами из связанных таблиц.
Объяснение ситуации/предыстория:
Вот моя структура связанной таблицы.
Имеется таблица object(товары). Необходимо было сохранять возможность добавлять разные атрибуты(то есть характеристики) разным объектам.
Имеется отдельная таблица "attribute" в которой сохраняются названия группа путктов
В таблице "group" сохраняются пункты для каждого атрибута(их может быть несколько штук.
Соответственно при сохранение объекта мы сохраняем в отдельную таблицу выбранных параметров (рис. выше)
Вопрос/проблема:
Мне нужно, что бы в фильтр фильтровал группу атрибутов как "OR" (это например аргумент 1.2 и аргумент 1.3)
И что бы когда выбираешь например аргумент 1.2 и аргумент 2.2 фильтр фильтровал их как "AND".
Вывожу я объекты. У меня получается выводить их все только с "OR", но мне так не нужно, и в этом проблема.
Как мне сделать так, чтобы при выборе различных атрибутов фильтровалось по типу "AND", а внутри атрибутов фильтровалось типом "OR"? Как в обычных фильтрах.
Описание своих действий:
Сгенерировал код с помощью GRUD.
Код в Search модели:
$query = Object::find()
->andWhere(['status' => 1])
->joinWith('objectCheckboxs')
...
...
$query->andFilterWhere([
...
...
'object_attribute_checkbox.group_id' => $this->getArr($params['GroupCheckboxes'][$this->type_id]),
]);
private function getArr($list){
$arr = [];
if (!is_null($list)){
foreach ($list as $item){
foreach ($item as $oneElem){
$arr[] = $oneElem;
}
}
}
return $arr;
}
$this->getArr($params['GroupCheckboxes'][$this->type_id] - это я получаю массив айдишников полей "group_id" (по итогу он выглядит следующим образом [9, 12]
Функция getArr() нужна для перебора полученного массива, в й массив типа [9, 12].
Также пробовал настроить фильтр таким способом, но ни чего не вышло:
$query->andFilterWhere([
'and',
['object_attribute_radio.group_id' => 9],
['object_attribute_radio.group_id' => 12]
,
]);