suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Laravel-Abfrage: orderBy funktioniert nicht mit groupBy (unter Verwendung der Join-Tabelle)

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粉316890884P粉316890884319 Tage vor357

Antworte allen(1)Ich werde antworten

  • 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();

    Antwort
    0
  • StornierenAntwort