У меня есть таблица с именем freight, с множеством историй, с именем таблицы freight_historic. 1: N. В этой исторической таблице у меня есть 3 столбца: id
(первичный ключ, автоинкремент), freight_id
и freight_statuses_id
.
Груз может иметь несколько исторических данных со статусом, последний исторический ряд из определенного груза определяет ваш текущий статус.
В таблице freight_statuses есть несколько столбцов, ID и NAME. и некоторые записи. Небольшой пример ниже
+----+-----------+
| ID | NAME |
+----+-----------+
| 1 | TRAVELING |
+----+-----------+
| 2 | CANCELLED |
+----+-----------+
Грузовая_история может быть
+----+------------+---------------------+
| ID | FREIGHT_ID | FREIGHT_STATUSES_ID |
+----+------------+---------------------+
| 1 | 1 | 1 |
+----+------------+---------------------+
| 2 | 1 | 2 |
+----+------------+---------------------+ --> last row inserted
Я попробовал этот код, чтобы показать, что все грузы, имеющие статус ПУТЕШЕСТВИЯ, но у груза есть 2 истории, со статусами ПУТЕШЕСТВОВАТЬ и ОТМЕНЕН (с УСТАНОВЛЕННОЙ ПОСЛЕДНЕЙ ЗАПИСЬЮ), все еще показывает мне результат.
$freight = Freight::with(['lastStatus.statusName'])->whereHas('lastStatus.statusName', function ($query) {
$query->where('name', 'TRAVELING');
})->get();
//Models
class FreightHistoric extends Model
{
public function statusName() {
return $this->belongsTo(FreightStatus::class, 'freight_statuses_id', 'id');
}
}
class Freight extends Model
{
public function lastStatus()
{
return $this->hasOne(FreightHistoric::class, 'freight_id', 'id')->latest();
}
}
Этот код показывает все записи со статусом «ПУТЕШЕСТВИЕ». Я хочу показать груз со статусом «ПУТЕШЕСТВИЕ» в его историческом журнале, только если это последняя запись.