Laravel 查询:orderBy 无法与 groupBy 一起使用(已加入 table)
Laravel Query: orderBy not working with groupBy (with a joined table)
我正在研究 Laravel 中的基本消息传递功能,并希望显示向当前登录用户发送消息的每个用户以及最后收到的消息,问题是“orderByDesc " 不工作,因为它显示第一条消息而不是最后一条消息。
这是我写的查询:
$receivedmessages = DB::table('messages')
->join('users', 'users.id', '=', 'messages.sender_id')
->select('messages.*', 'users.username')
->where('receiver_id', Auth::user()->id)
->orderByDesc('messages.created_at')
->groupBy('receiver_id')
->get();
知道如何解决这个问题吗?
谢谢
删除->where('receiver_id', Auth::user()->id)
此条件以获取每个用户的结果,而不是您登录的用户
实现上述目标的技巧是从 table 获取最大 ID 并在 WHERE IN
条件
中使用这些 ID
$receivedmessages = DB::table('messages')
->join('users', 'users.id', '=', 'messages.sender_id')
->select('messages.*', 'users.username')
->whereRaw('messages.id IN (SELECT MAX(messages.id) FROM messages GROUP BY receiver_id, sender_id)')
->where('receiver_id', Auth::user()->id)
->orderByDesc('messages.created_at')
->get();
我正在研究 Laravel 中的基本消息传递功能,并希望显示向当前登录用户发送消息的每个用户以及最后收到的消息,问题是“orderByDesc " 不工作,因为它显示第一条消息而不是最后一条消息。
这是我写的查询:
$receivedmessages = DB::table('messages')
->join('users', 'users.id', '=', 'messages.sender_id')
->select('messages.*', 'users.username')
->where('receiver_id', Auth::user()->id)
->orderByDesc('messages.created_at')
->groupBy('receiver_id')
->get();
知道如何解决这个问题吗? 谢谢
删除->where('receiver_id', Auth::user()->id)
此条件以获取每个用户的结果,而不是您登录的用户
实现上述目标的技巧是从 table 获取最大 ID 并在 WHERE IN
条件
$receivedmessages = DB::table('messages')
->join('users', 'users.id', '=', 'messages.sender_id')
->select('messages.*', 'users.username')
->whereRaw('messages.id IN (SELECT MAX(messages.id) FROM messages GROUP BY receiver_id, sender_id)')
->where('receiver_id', Auth::user()->id)
->orderByDesc('messages.created_at')
->get();