Laravel - leftJoin以“as”为参数

时间:2018-01-04 20:23:13

标签: php mysql laravel left-join

我有以下表格:

主要
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'”。

1 个答案:

答案 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')