Laravel получение последнего сообщения из таблицы чата - PullRequest
1 голос
/ 12 февраля 2020

У меня есть таблица "chat" в моей базе данных. enter image description here

Где recipient_user_id - кто получает сообщение, а sender - отправитель. Каждое сообщение в чате - это новая строка в этой таблице. Проблема Когда пользователь открывает свой профиль, я хочу отобразить

 ----------------------------------------------------
|User_name_who_talked_with| last_message| time_sent | 
|----------------------------------------------------
|.....                                              |
|......                                             |
|---------------------------------------------------|

Мой запрос

$chat = Chat::where('sender_user_id',$user->user_id)
                ->groupBy('recipient_user_id')
                ->orderBy('updated_at','desc')->get();

Но отображает не last_message. Отображает первое сообщение.

1 Ответ

3 голосов
/ 12 февраля 2020
Chat::where('sender_user_id',$user->user_id)
    ->orderBy('updated_at', 'desc')
    ->get()
    ->unique('recipient_user_id');

Запрос вернет все сообщения, упорядоченные по updated_at, а метод unique сократит его до одного сообщения для каждого recipient_user_id.

$chats = Chat::select(DB::raw('*, max(updated_at) as updatedAt'))
    ->where('sender_user_id',$user->user_id)
    ->orderBy('updatedAt', 'desc')
    ->groupBy('recipient_user_id')
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...