渴望装载的拉格比(larby)

时间:2018-07-03 06:50:43

标签: eloquent eager-loading laravel-5.6

我有一个称为chat的表,该表与用户和消息(消息与用户一起)连接在一起,查询工作正常,只是我试图用created_at(desc)添加orderby,但它必须来自表消息。帮我在这里。提前致谢。以下是我的查询

return new GroupDirectChat(
    Chat::with(['messages.users', 'users' => function ($query) {
        $query->where('id', '!=', Auth::id());
    }])
        ->where('direct_chat', 1)
        ->whereHas('users', function ($query) {
            $query->where('id', '=', Auth::id());
        })
        ->get()
);

1 个答案:

答案 0 :(得分:0)

使用子查询组合JOIN:

$chats = Chat::select('chats.*')
    ->join('messages', 'messages.chat_id', 'chats.id')
    ->where('chats.direct_chat', 1)
    ->where('messages.id', function ($query) {
        $query->select('id')
            ->from('messages')
            ->whereColumn('chat_id', 'chats.id')
            ->latest()
            ->limit(1);
    })
    ->whereHas('users', function ($query) {
        $query->where('id', '=', Auth::id());
    })
    ->latest('messages.created_at')
    ->with(['messages.users', 'users' => function ($query) {
        $query->where('id', '!=', Auth::id());
    }])
    ->get();

请注意,此查询仅选择包含至少一条消息的聊天。