Построение запроса

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
nihaha
Сообщения: 95
Зарегистрирован: 2017.02.12, 13:30

Построение запроса

Сообщение nihaha »

Помогите построить правильный запрос.
Делаю фильтр товаров для ИМ. Все параметры фильтрации (опции) хранятся в табличке товаров в json'е, в таком виде:

Код: Выделить всё

{
   "Тип применения камер":[
      "уличные"
   ],
   "Тип корпуса:":[
      "цилиндрический"
   ],
   "Разрешение, Мп:":{
      "4":"4 Мп (2688*1520) "
   },
   "Угол обзора:":{
      "3":"широкий - 91°-100°"
   }
}
При выборе опции на фронте делаю выборку по логике: показывать все товары, у которых есть все отмеченные опции. Все отрабатывает как ожидалось. Вот такой запрос получился.

Код: Выделить всё

public function getAllByFilterRequest($request, $priceLow, $priceHigh): DataProviderInterface
{
    $query = Product::find()->alias('p')->active('p')->with('category');
    $query->andWhere(['BETWEEN', 'price', $priceLow, $priceHigh]);
    if($request != null) {
        $query->andWhere(['like', 'product_characteristics', $request]);
    }
    $query->groupBy('p.id');

    return $this->getProvider($query);
}
В $request у меня массив опций, которые прекрасно находятся в json'е.

Задача сделать так, чтоб выбирались все товары у которые есть хотя бы одна выбранная опция. Т.е. если я сейчас отмечу два типа, уличные и внутренние камеры, то не найдется ничего, а нужно, чтоб нашлись и те и другие.
Аватара пользователя
nihaha
Сообщения: 95
Зарегистрирован: 2017.02.12, 13:30

Re: Построение запроса

Сообщение nihaha »

Нет, ну вот так всегда... только написал вопрос - сразу решение нашлось.
Достаточно было поменять 'like' на 'or like' и все находится замечательно.
Ответить