Как выбрать последнюю запись в каждой группе в Laravel?
Есть таблица с сообщениями, структура простая: id, sender, recipient, chat_id
Мне нужно вывести последнее сообщение в каждом из чатов
Группировка по chat_id через ->groupBy('chat_id') дает первую запись.
->orderBy('id','desc') тут не работает.
Как сделать?
Владимир Кохан, этот запрос выводит 1 последний диалог, в котором также, как и в моем случае, отображается самое первое сообщение. Мне нужно вывести все диалоги, и чтобы у каждого из них было последнее сообщение.
galyasokolova, я так понимаю, что у вас должно быть две таблицы - messages и chaty, связанные между собой. Тогда можно выбирать из таблицы messages все сообщения, которые относятся к определенному чату. Поле chat_id в таблице messages - это то, которое сооьтветствует полю id в таблице chaty.
Чтобы правильно выводить сообщения по дате их добавления, нужно добавить в таблицу сообщений поле created_at
Но вообще это поле у вас должно быть.
Второй момент это используете ли вы Eloquent или строите запросы сами?
jazzus, на счет first может быть, точно не помню. А вот насчет hasOne я вас не понял, почему у вас не получилось? Вероятнее всего вы просто что-то не так сделали
Константин Б., да я про твой пример. Получить последнюю запись с помощью with + hasMany с first не получится. Если нужен with то нужно брать latest запись в hasOne. Тебе бы автор написала если бы тестила ответы, а не выбирала монеткой