Laravel 5.5. Многие-ко-многим. Получите последний экземпляр - PullRequest
0 голосов
/ 25 июня 2018

У меня есть такие модели (многие-ко-многим)

class Driver
{
    public function cars()
    {
       return $this->belongsToMany(Car::class);
    }
}
class Car
{
    public function drivers()
    {
        return $this->belongsToMany(Driver::class);
    }
}

My Car имеет столбец activated_at, который может быть null.

Как я могу получить последнюю активированную машину на водителей на определенной парковке?

как то так

Parking::find(2)->drivers()->lastActivatedCars... * * 1013

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Надеюсь, это поможет:

Parking::with(['drivers' => function ($driverQuery) {
    $driverQuery->with(['cars' => function ($carsQuery) {
        $carsQuery->orderBy('activated', 'desc')
            ->limit(1);
    }]);
}])->find(2);
0 голосов
/ 25 июня 2018

Вы можете просто создать прицел для машины.

// Car.php
public function scopeActivated($query)
{
    return $query->whereNotNull('activated_at')->orderBy('activated_at', 'DESC');
}

А потом в вашем Driver.php:

// Driver.php

public function latestActivatedCar()
{
    return $this->cars()->activated()->first();
}

Тогда вы можете просто:

$latest = $driver->latestActivatedCar();

Или вы можете создать отношения, чтобы вы могли загружать.

// Driver.php

public function latestActivatedCar()
{
    return $this->belongsToMany(Car::class)
                ->whereNotNull('activated_at')
                ->orderBy('activated_at', 'DESC')
                ->limit(1);
}

Тогда вы можете просто:

$drivers = Parking::find(2)->drivers;
$drivers->load('latestActivatedCar');
...