Maison > Questions et réponses > le corps du texte
Je développe une fonctionnalité de messagerie de base dans Laravel et souhaite afficher tous les utilisateurs qui ont envoyé un message à l'utilisateur actuellement connecté ainsi que le dernier message reçu. Le problème est que "orderByDesc" ne fonctionne pas correctement, il affiche le premier message au lieu du le dernier.
Voici la requête que j'ai écrite :
$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();
Une idée sur la façon de résoudre ce problème ? Merci
P粉5461383442024-03-29 10:58:36
Supprimez ->where('receiver_id', Auth::user()->id)
cette condition pour obtenir des résultats pour chaque utilisateur au lieu de celui avec lequel vous vous êtes connecté
L'astuce pour réaliser ce qui précède est d'obtenir le maximum d'identifiants du tableau et d'utiliser ces identifiants dans la WHERE IN
condition
$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();