Я извлекаю данные из таблиц Severl следующим образом:
$data = Accommodation::join("hotels", "accommodations.hotel_id", " = ", "hotels.id")
->join("room_types", "accommodations.room_type", " = ", "room_types.id")
->join("country", "accommodations.country_id", " = ", "country.id")
->join("accommodation_accreditation", "accommodations.id", " = ", "accommodation_accreditation.accommodation_id")
->join("accreditation", 'accreditation.id', " = ", "accommodation_accreditation.accreditation_id")
->select('hotels.name as Hotel' ,'room_types.type as Room', 'price_per_night as Price per Night', 'check_in as Check In', 'check_out as Check Out', 'nights as Nights', 'sub_total as Sub Total', 'country.name as Country', 'accreditation.full_name as Occupants')
->get()->toArray();
И я получаю ряд за каждого жильца в комнате.
Room Price per Night Check In Check Out Nights Sub Total Country Occupants
---------------------- ----------------- ------------ ------------ -------- ----------- --------- -------------------
Twin/Double standart 160 2019-04-10 2019-04-15 5 800 UKR Vlad Timochenko
Twin/Double standart 160 2019-04-10 2019-04-15 5 800 UKR Selena Viachenko
Мне нужно соединить имена жильцов и поместить их в одну строку следующим образом:
Room Price per Night Check In Check Out Nights Sub Total Country Occupants
---------------------- ----------------- ------------ ------------ -------- ----------- --------- ------------------------------------
Twin/Double standart 160 2019-04-10 2019-04-15 5 800 UKR Vlada Nikolchenko, Olena Diachenko
Вот моя схема для рассматриваемых таблиц
Надеюсь понятно. Будет здорово, если вы сможете помочь.
Почему люди боятся использовать отношения Eloquent? Есть ли какая-то конкретная причина, по которой вы не пошли с ним?
@ Бенджамин Правда в том, что мне это не очень удобно, и мне нужно было закончить с этим быстрее, поэтому я решил использовать что-то более знакомое.






Честно говоря, я нашел полное решение для своего случая в разных местах.
Как предложил Сэм, я использовал GROUP_CONCAT. И мой код выглядел так:
$data = Accommodation::join("hotels", "accommodations.hotel_id", " = ", "hotels.id")
->join("room_types", "accommodations.room_type", " = ", "room_types.id")
->join("country", "accommodations.country_id", " = ", "country.id")
->join("accommodation_accreditation", "accommodations.id", " = ", "accommodation_accreditation.accommodation_id")
->join("accreditation", 'accreditation.id', " = ", "accommodation_accreditation.accreditation_id")
->select('hotels.name as Hotel' ,'room_types.type as Room', 'price_per_night as Price per Night', 'check_in as Check In', 'check_out as Check Out', 'nights as Nights', 'sub_total as Sub Total', 'country.name as Country', DB:raw("GROUP_CONCAT('accreditation.full_name SEPRATOR ',') as `Occupants`"))
->groupBy('accommodation.id')
->get()->toArray();
Еще одна вещь, которую я должен был остерегаться, заключалась в использовании обратных кавычек для лейбла Occupants, иначе РАЗДЕЛИТЕЛЬ не работал должным образом.
Есть и другие подобные темы, так что это дубликат.
Group_concat — красноречивый laravelкак использовать GROUP_CONCAT в laravel
Для этого не требуются какие-либо специфические функции Laravel, вы можете использовать
GROUP_CONCATMySQL.