@galyasokolova

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

Есть таблица с сообщениями, структура простая: id, sender, recipient, chat_id
Мне нужно вывести последнее сообщение в каждом из чатов
Группировка по chat_id через ->groupBy('chat_id') дает первую запись.
->orderBy('id','desc') тут не работает.
Как сделать?
  • Вопрос задан
  • 881 просмотр
Решения вопроса 2
А если попробовать по максимальному id?
max('id')
Ответ написан
@Kostik_1993
Web Developer
Чтобы правильно выводить сообщения по дате их добавления, нужно добавить в таблицу сообщений поле 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы