我有以下表格:
主要 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]);
主/ 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'”。
您收到错误消息,因为您在房间表上加入了两次。因此,您的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')