blrik
@blrik
Музыкант

Как сделать правильно sql запрос на выборку товаров из фильтра в laravel?

Добрый день, подскажите как сделать правильно выборку из базы данных?

Сейчас делаю так:
$ar_select_properties = [1,2];
Product::select('product.*')
->leftJoin('product_attribute', 'product_attribute.product_id', '=', 'product.id')
->where(function($query) use ($ar_select_properties) {
    if (isset($ar_select_properties)) {
        foreach ($ar_select_properties as $property) {
            $query->where('product_attribute.attribute_id', $property);
        }
    }
})->get();

SQL получается
select `product`.`id` from `product` left join `product_attribute` on `product_attribute`.`product_id` = `product`.`id`
where `product_attribute`.`attribute_id` = '1' and `product_attribute`.`attribute_id` = '2'

но в результате ничего не приходит, но если $ar_select_properties = [1] или $ar_select_properties = [2]

например:
select `product`.`id` from `product` left join `product_attribute` on `product_attribute`.`product_id` = `product`.`id`
where `product_attribute`.`attribute_id` = '1'

возвращаются нормальные данные.
  • Вопрос задан
  • 527 просмотров
Решения вопроса 1
@Kostik_1993
Web Developer
Есть два пути это сначала получить все товары и атрибуты, а затем работать с коллекцией. Благо в Laravel есть все для этого.

Либо фильтровать через красноречивого
Но для этого вам нужно сделать связь многие ко многим. Судя по вашему коду она у вас есть, и я надеюсь она описана правильно.
Product::with(['attributes' => function ($q) use ($ar_select_properties) {
$q->whereIn('id', $ar_select_properties);
}])->get();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vimes7
Ничего не приходит, потому что поле `attribute_id` не может быть одновременно быть равно 1 и 2. Используйте условие OR.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы