laravel - 使用 laravel eloquent 合并/连接数据行
问题描述
我通过以下方式从严重表中检索数据:
$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
这是我有问题的表的架构
希望很清楚。如果您能提供帮助,将非常高兴。
解决方案
老实说,我从不同的地方为我的案例找到了完整的解决方案。
正如山姆所建议的那样,我使用了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 标签使用反引号,否则 SEPARATOR 无法正常工作。
还有其他类似的线程,所以这是重复的。
推荐阅读
- python - 无法对数据框列进行排序,“numpy.ndarray”对象没有属性“sort_values”,无法用逗号分隔数字
- django - “str”对象没有属性“id”django
- javascript - 滚动时背景颜色变化
- python - 将数据从 Excel 导入 Treeview 时出现问题
- html - 绑定以角度切换设置
- pdf - PDF - 为移动设备自动调整?
- swift - 根据用户位置显示自定义信息 FireStore
- python - 我在 Macbook 上的 opencv python 有这个问题
- for-loop - ansible jinja2 - 如何在其他“for语句”中使用“循环范围”输出
- python - Python:类代码有问题