Есть ли способ выбрать последнюю запись, а затем отфильтровать по взаимосвязи? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть таблица с именем 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();
    }
}

Этот код показывает все записи со статусом «ПУТЕШЕСТВИЕ». Я хочу показать груз со статусом «ПУТЕШЕСТВИЕ» в его историческом журнале, только если это последняя запись.

1 Ответ

0 голосов
/ 15 июня 2019

Вы можете использовать Laravel Query Builder

$latestHistoric= DB::table('freight_historics')
    ->latest()
    ->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...