我正在 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();
知道如何解决这个问题吗? 谢谢
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
删除
->where('receiver_id', Auth::user()->id)此条件以获取每个用户的结果,而不是您登录时使用的结果实现上述目标的技巧是从表中获取最大 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();