Делаю фильтр товаров для ИМ. Все параметры фильтрации (опции) хранятся в табличке товаров в 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);
}
Задача сделать так, чтоб выбирались все товары у которые есть хотя бы одна выбранная опция. Т.е. если я сейчас отмечу два типа, уличные и внутренние камеры, то не найдется ничего, а нужно, чтоб нашлись и те и другие.