我正在開發 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();
知道我該如何解決嗎?謝謝
uj5u.com熱心網友回復:
洗掉->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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/468619.html
