Laravel, где проверяется только последняя запись отношений - PullRequest
0 голосов
/ 07 ноября 2018

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


Обновление

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

https://stackoverflow.com/a/53120558/9500574

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018
Post::with([ 'revisions' => function($query) {
   $query->orderBy('created_at', 'desc')->where('status', 'approved')->limit(1);   
}])->get()->filter(function($item) {
   return $item->revisions->count() > 0;
});

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

0 голосов
/ 07 ноября 2018

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

$posts = Post::whereHas('revisions', function($q){
   $q->where('status','approved')->orderBy('created_at','desc')->first();
})->get();
...