Laravel 5.3.Laravel. Как найти модели, которые имеют конкретную последнюю связанную модель
Модель пакета имеет много ступенчатых моделей. В шаговой модели есть столбец с номерами status
, тип которых крошечный int и created_at
. Например, пакет A
, имеет следующие этапы:
- 18 октября 10:00, статус 1
- 19 октября 09:00, статус 2
И, пакет B
, имеет следующие этапы:
- 19 октября 08:00, статус 1
- 19 октября 09:00, статус 2
- 19 октября 10:00, статус 3
Так же, как это, многие пакеты, каждый из них имеет много шагов.
A
«s последние статус шага составляет 2 и B
» s является 3
Моя проблема в том, как найти пакеты которых последний шаг статус 2? Ожидаемый результат - набор пакетов, в этом примере должен содержать A
.
Я пробовал добавить это в свою модель упаковки.
public function steps()
{
return $this->hasMany('App\Step');
}
public function status()
{
return $this->steps()->latest()->limit(1);
}
и запрос с
Package::whereHas('status', function ($q) {
$q->where('status', 2);
})->get();
, но не может получить ожидаемый результат.
Что не ожидалось, если в таблице пакетов есть только 1 строка, пакет B
, ожидаемый результат - пустая коллекция. Но он возвращает коллекцию, содержащую B
.
Я также попытался обновлению статусной функции в пакете модели для
public function status()
{
return $this->hasOne('App\Step')->latest();
}
, но она по-прежнему не работает.
Итак, каков правильный путь? Огромное спасибо вам.
Я думаю, что вы близки, вы должны попытаться добавить whereDoesntHave статус> 2 на ваш запрос ... Если у вас нет других ответов, я попробую сегодня вечером – Hammerbot