@andrey_27081

Как составить запрос в базу из трех таблиц, с определенным фильтром?

Laravel 8.

Недавно начал учить фреймворк Laravel, решил начать с создания интернет-магазина.
Задачу поставил следующую: реализовать динамическое добавление атрибутов для определенных подкатегорий.

Выстроил такую логику:
У меня есть 3 таблицы, связанные между собой, на картинке эти таблицы
5fd780279b995355322477.jpeg

Вот мой запрос:
SELECT * FROM `product`
JOIN `product_attributes`
ON `product_attributes`.`product_id` = `product`.`id`
JOIN `attribute`
On `attribute`.`id` = `product_attributes`.`attribute_id`
WHERE (`attribute`.`name_attribute` = 'size' AND `product_attributes`.`value` = '256')

При фильтре с одним атрибутом, все работает нормально, но если я добавляю второй атрибут, выводит 0 строк

Второй атрибут добавляю таким образом:
SELECT * FROM `product`
JOIN `product_attributes`
ON `product_attributes`.`product_id` = `product`.`id`
JOIN `attribute`
On `attribute`.`id` = `product_attributes`.`attribute_id`
WHERE (`attribute`.`name_attribute` = 'size' AND `product_attributes`.`value` = '256')
AND (`attribute`.`name_attribute` = 'color' AND `product_attributes`.`value` = 'red')


Может я не правильно добавляю атрибуты, почему нет результатов при фильтре по двум атрибутам?
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
На мрй скромный взгляд, если Laravrel, то eloquent а не джойны.

Ваша задача решается через many to many отношения и eloquent запросами.
Связываете модели через belongsToMany.
Создаете таблицу attribute_product ( в алфавитном порядке и ед. Числе)
В доках все четко это расписано.
А дальше к моделям прикрепляете withPivot и доп. колонки.

В любом случае по ключевым словам laravel manyToMany, withPivot, whereHas найдете много информации
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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