Laravel-Abfrage: orderBy funktioniert nicht mit groupBy (unter Verwendung der Join-Tabelle)
P粉316890884
P粉316890884 2024-03-28 16:08:45
0
1
325

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粉316890884
P粉316890884

Antworte allen(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();
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage