@ralo

Eloquent ORM не получается составить запрос?

Есть две таблицы в одной хранятся сумки и вся информация по ним в другой хранятся фото этих сумок,
вот они
59e33a06137eb323767494.png59e33a0b8a70e098180525.png

мой запрос выглядит так
$data = DB::table('bags')->leftJoin('bags_photo', 'bags.id', '=', 'bags_photo.bag_id')->get()->toArray();
$array = json_decode(json_encode($data), true);

как изменить мой запрос так чтобы получить к каждой сумке все ее фото и саму инфу по ней
потому что у меня сейчас дублируются информация по сумкам в зависимости от количества фото для сумки и получается как то так

59e33b258f891831450868.png
59e33b2e7b587616373693.png
  • Вопрос задан
  • 261 просмотр
Решения вопроса 1
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Для этого в Eloquent (и не только) существуют связи, в Вашем случае - один ко многим, т.е. одна сумка -> много фотографий.

P.S. Eloquent - это такая очень удобная штука, встроенная в Laravel, для работы с данными из БД, в т.ч. позволяющая быстро настраивать связи между объектами.

----------

Ещё есть вариант сделать это прямо на уровне SQL-запроса, для MySQL выглядеть будет примерно так:
SELECT service_category.*, GROUP_CONCAT(service.id SEPARATOR ',') AS ids
FROM service_category 
LEFT JOIN service ON service.category_id = service_category.id
GROUP BY service_category.id

В данном примере, таблица service ссылается на таблицу service_category через поле service.category_id. В качестве результата получаем вот такой дополнительный столбец, где перечислены все "service"ы для текущей категории (их ID) с разделителем через запятую:
59e33ec521904576522071.png

UPD. Тот запрос который у Вас в примере - это НЕ Eloquent, это QueryBuilder.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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