Laravel - 左边加入“as”参数

问题描述 投票:-1回答:1

我有以下表格:

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

php mysql laravel left-join
1个回答
2
投票

您收到错误消息,因为您在房间表上加入了两次。因此,您的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')
© www.soinside.com 2019 - 2024. All rights reserved.