выберите все продукты, которые имеют все выбранные параметры, с помощью сводной таблицы в laravel

выберите все продукты, которые имеют все выбранные параметры, с помощью сводной таблицы в laravel

26.06.2020 11:55:59 Источник

У меня есть модели Product и Option, которые имеют отношение "многие ко многим" через Product_Option. Product_Option имеет поля option_id и product_id.

Теперь у меня есть массив option_ids, и я хочу выбрать все продукты, которые имеют все эти опции (могут быть и другие опции, но я хочу выбрать только те продукты, которые имеют все эти опции одновременно.)

Я написал этот код, но он возвращает все продукты, которые имеют хотя бы один из этих вариантов:

$products = Product::with(['translations'])->whereHas('options', function ($query) use ($options) {
                    $query->whereIn('options.id', $options);
                })->toSql();

Пожалуйста, помогите мне найти лучший способ.

У вопроса есть решение - Посмотреть?

Ответы - выберите все продукты, которые имеют все выбранные параметры, с помощью сводной таблицы в laravel / select all products that have all of selected options via a pivot table in laravel

Является ответом!
OMR

26.06.2020 12:04:41

благодаря этому ответу

вы могли бы сделать это, используя несколько "где":

$products = Product::with(['translations']);
        foreach ($options as $option)
        {
            $products=$products->whereHas('options', function ($query) use ($option) {
                $query->where('options.id', $option);
            });
        }
        $products=$products->toSql();
Закрыть X