首页  >  问答  >  正文

Laravel 查询:orderBy 不与 groupBy 一起使用(使用连接表)

我正在 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粉316890884P粉316890884204 天前287

全部回复(1)我来回复

  • P粉546138344

    P粉5461383442024-03-29 10:58:36

    删除 ->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();

    回复
    0
  • 取消回复