Laravel 查询:orderBy 不与 groupBy 一起使用(使用连接表)
P粉316890884
P粉316890884 2024-03-28 16:08:45
0
1
319

我正在 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();

知道如何解决这个问题吗? 谢谢

P粉316890884
P粉316890884

全部回复(1)
P粉546138344

删除 ->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();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板