Laravel, где проверяется только последняя запись отношений

У меня есть 2 таблицы (сообщения, ревизии), и между ними есть связь
В сообщении много ревизий (отношение один ко многим)
Таблицаревизий имеет столбец с именем status (утвержден или отклонен)
Теперь я хочу выбрать все сообщения, если его последняя редакция утверждена
Я перепробовал много методов, но я мог получить посты с утвержденным статусом


Обновить

Я нашел хорошее решение в этом ответе

/questions/23199517/laravel-gde-proveryat-poslednie-zapisi-otnoshenij-bez-proverki-drugih/23199523#23199523

2 ответа

Post::with([ 'revisions' => function($query) {
   $query->orderBy('created_at', 'desc')->where('status', 'approved')->limit(1);   
}])->get()->filter(function($item) {
   return $item->revisions->count() > 0;
});

Коллекция будет содержать только те сообщения с утвержденными изменениями.

Я полагаю, этот способ может сработать, но я не уверен в first() внутри запроса.

$posts = Post::whereHas('revisions', function($q){
   $q->where('status','approved')->orderBy('created_at','desc')->first();
})->get();
Другие вопросы по тегам