我有以下表格:
主要的
身份证件
用户id
主机id
用户
身份证件
房间id
主机
身份证件
房间id
房间
身份证件
数字
如您所见,用户和主机都与会议室相连。不幸的是,users.room\u number=1,hosts.room\u number=2。如何在laravel中使用leftjoin创建查询来区分users.room\u number和hosts.room\u number?然后我如何引用foreach循环中的每个房间号?
我有这样的想法:
主控制器.php
$main = DB::table('main')
->leftJoin('users', 'users.id', '=', 'main.user_id')
->leftJoin('hosts', 'hosts.id', '=', 'main.host_id')
->leftJoin('rooms as users_rooms', '=', 'rooms.id', 'users.room_id')
->leftJoin('rooms as hosts_rooms', '=', 'rooms.id', 'hosts.room_id')
->select('users_rooms.number as u_rooms_number', 'hosts_rooms.number as
h_rooms_number')
->get();
return view('main.index', ['main' => $index]);
main/index.blade.php
@foreach($main as $element)
{{ $element->u_rooms_number }}
{{ $element->h_rooms_number }}
@endforeach
由于leftjoin和'rooms as users\u rooms'和'rooms as hosts\u rooms'都存在,我得到一个错误“sqlstate[42s22]:column not found:1054 unknown column'rooms.id'in'on clause'”。
1条答案
按热度按时间y53ybaqx1#
您将收到错误消息,因为您在rooms表上加入了两次。你的
on
因此,子句不能识别用'rooms.id'
.为了避免冲突,您在查询中正确地重命名了表联接。因此,您可以使用这些名称,就好像它们本身就是表一样。