laravel-leftjoin with“as”参数

emeijp43  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(494)

我有以下表格:
主要的
身份证件
用户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'”。

y53ybaqx

y53ybaqx1#

您将收到错误消息,因为您在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')

相关问题