Laravel 5.1:具有相同列名的句柄连接

2022-08-30 14:07:38

我正在尝试从数据库中获取以下内容:

  • 用户名
  • 用户avatar_name
  • 用户avatar_filetype
  • 完整的conversation_messages

具有以下查询:

    static public function getConversation($id)
{
    $conversation = DB::table('conversation_messages')
        ->where('belongsTo', $id)
        ->join('users', 'conversation_messages.sender', '=', 'users.id')
        ->join('user_avatars', 'conversation_messages.sender', '=', 'user_avatars.id')
        ->select('users.name', 'conversation_messages.*', 'user_avatars.name', 'user_avatars.filetype')
        ->get();
    return $conversation;
}

到目前为止,它工作正常,但头像的列名称是“”,就像“”表中的列名称一样。因此,如果我使用此查询来获取输出,则覆盖nameusers$conversation->nameavatar.nameusers.name

有没有办法重命名查询输出,就像laravel 5.1中的mysql“as”功能一样?

例如:

$conversation->avatarName

$conversation->userName

答案 1

嗯,好吧..我在这里找到了一个简单的解决方案

->select('users.name as userName', 'conversation_messages.*', 'user_avatars.name as avatarName', 'user_avatars.filetype')

正如您可以提到的,我已经在表.columnName旁边添加了请求的“as-Feature”。


答案 2

看看这个尝试加入三个表员工,客户和预订(数据透视表)的示例。

 $bookings = \DB::table('bookings')
        ->join('staffs', 'staffs.id' , '=', 'bookings.staff_id')
        ->join('customers', 'customers.id' , '=', 'bookings.customer_id')
        ->select('bookings.id', 'bookings.start_time',  'bookings.end_time', 'bookings.service', 'staffs.name as Staff-Name',  'customers.name as Customer-Name')
        ->orderBy('customers.name', 'desc')
        ->get();
    return view('booking.index')
            ->with('bookings', $bookings);

推荐