@galyasokolova

Как выбрать последнюю запись в каждой группе в Laravel?

Есть таблица с сообщениями, структура простая: id, sender, recipient, chat_id
Мне нужно вывести последнее сообщение в каждом из чатов
Группировка по chat_id через ->groupBy('chat_id') дает первую запись.
->orderBy('id','desc') тут не работает.
Как сделать?
  • Вопрос задан
  • 274 просмотра
Решения вопроса 2
А если попробовать по максимальному id?
max('id')
Ответ написан
@Kostik_1993
Fullstack Web Developer | PHP | Laravel | Vue.js
Чтобы правильно выводить сообщения по дате их добавления, нужно добавить в таблицу сообщений поле created_at
Но вообще это поле у вас должно быть.
Второй момент это используете ли вы Eloquent или строите запросы сами?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@jazzus
Сделать hasOne отношение в модели Chat
public function lastMessage()
{
  return $this->hasOne('App\Models\Message','chat_id', 'id')->latest();
}

В контроллере
$chats = Chat::with('lastMessage')->get();
в шаблоне
@foreach ($chats as $chat)
  {{ $chat->lastMessage->name }}
@endforeach
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
17 июн. 2021, в 23:09
800 руб./в час
17 июн. 2021, в 22:01
35000 руб./за проект
17 июн. 2021, в 20:24
22000 руб./за проект