Как правильно фильтровать продукты на Laravel? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть область действия на моей модели. Продукт:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...