У меня есть область действия на моей модели. Продукт:
public function scopeAttrSearch($query, $ids)
{
$query->whereHas('attribute.attribute', function ($q) use ($ids) {
foreach ($ids as $category => $values) {
$q->whereIn('attribute_value_id', $values);
}
});
return $query;
}
И у меня есть фильтры на странице с несколькими флажками.Флажки каждой группы имеют категорию фильтра.Когда пользователь нажимает на флажки, я отправляю id
категорию фильтра и id
значение этого флажка.Переменная ids
имеет следующую структуру:
array:2 [
1 => array:2 [
0 => "1"
1 => "3"
],
3 => array:2 [
0 => "5"
1 => "6"
]
]
Где 1
и 3
id фильтров категории.И массивы к ним - это флажки значений id фильтра.
На контроллере я называю эту область действия:
if (@$request->data['attrs']) {
$_products = $_products->attrSearch($request->data['attrs']);
}
И возвращаю на страницу уже отфильтрованные продукты в шаблоне:
return $_products;
У меня проблема.Фильтр рабочий.Но если я поставлю флажки в разных категориях, я получу пустые результаты.Если я отмечаю флажки из той же категории - все работает, я получаю фильтрованные продуктыКак решить эту проблему с другой категорией?
Отношения модели в продукте:
public function attribute()
{
return $this->hasMany('App\Models\ProductAttribute');
}
ProductAttribute:
public function attribute()
{
return $this->belongsTo('App\Models\AttributeValue', 'attribute_value_id');
}
Идентификатор категории фильтра имеет столбец attribute_id