Heim > Fragen und Antworten > Hauptteil
Ich entwickle grundlegende Nachrichtenfunktionen in Laravel und möchte jeden Benutzer anzeigen, der eine Nachricht an den aktuell angemeldeten Benutzer gesendet hat, sowie die letzte empfangene Nachricht. Das Problem besteht darin, dass „orderByDesc“ nicht richtig funktioniert und stattdessen die erste Nachricht anzeigt Letzter.
Das ist die Anfrage, die ich geschrieben habe:
$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();
Irgendeine Idee, wie man dieses Problem lösen kann? Danke
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();