Связь многие ко многим с помощью join в Laravel?

Имеется 3 таблицы: products, product_parameter, parameters.
В products есть 2 продукта, у которых есть определенные параметры, которые прописаны в таблице parameters. Таблица product_parameter является связующей.
Стоит задача отфильтровать продукты по параметрам. Сколько ни пытался, все время выводились лишние копии продуктов. Решил в очередной раз начать с нуля, написал следующий код.
$goods = DB::table('products')
			->join('product_parameter as product_parameter', 'products.id', '=', 'product_parameter.product_id')
			->join('parameters as parameters', 'product_parameter.parameter_id', '=', 'parameters.id')
			->select('products.*')->get();

Результат следующий: выдал 6 объектов, то есть для каждого продукта по три копии! И тут я понял, что, скорее всего, все дело в связующей таблице, а точнее в неправильных связях, потому что она содержит как раз шесть связующих записей.
Собственно вопрос: что нужно исправить, чтобы записи выводились без копий, как при обычном запросе, так и при фильтрации по параметрам?
P.s.: Left join не изменил ситуацию.
  • Вопрос задан
  • 1234 просмотра
Решения вопроса 1
AmdY
@AmdY
PHP и прочие вебштучки
Используйте ORM, а не DB::table, не надо страдать. А так результат правильный, на каждое совпадение у вас лишняя запись и нужно потом группировать по уникальному полю. Возможно сработает - groupBy('products.id')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы