我有以下表格:
主要
id
user_id
host_id
用户
id
room_id
主持人
id
room_id
房间
id
号码
正如您所看到的,用户和主机都与桌面相连。不幸的是users.room_number = 1,hosts.room_number = 2.如何在laravel中使用leftJoin创建一个查询来区分users.room_number和hosts.room_number?然后我如何在foreach循环中引用每个room_number?
我有这样的事情:
MainController.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_rooms'和'rooms as hosts_rooms',我得到一个错误“SQLSTATE [42S22]:未找到列:1054未知列'rooms.id'在'on clause'”。
答案 0 :(得分:2)
您收到错误消息,因为您在 rooms 表上加入了两次。因此,您的on
子句无法识别使用'rooms.id'
指定了哪两个表。
为避免冲突,您在查询中正确地重命名了表连接。因此,您可以使用这些名称,就像它们自己就是表格一样。
->leftJoin('rooms as users_rooms', '=', 'users_rooms.id', 'users.room_id')
->leftJoin('rooms as hosts_rooms', '=', 'hosts_rooms.id', 'hosts.room_id')