我有一个称为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()
);
答案 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();
请注意,此查询仅选择包含至少一条消息的聊天。