Расширьте модель Laravel, которая всегда присоединяет `где статус = 'отменено`` для выбора операторов? - PullRequest
0 голосов
/ 09 марта 2020

Я работаю с Laravel и Nova . Так что в основном в Laravel у меня есть такая модель:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
}

Затем Nova помогает мне создать красивый веб-интерфейс CMS на https://example.com/admin/resouces/flights, который перечисляет все мои рейсы и https://example.com/admin/resouces/flights/<id>, чтобы позволить мне CRUD против конкретной записи. Все, что мне нужно сделать, чтобы это произошло, - создать файл app/Nova/Flight.php с содержимым:

<?php

namespace App\Nova;

//... import other classes like Text Fields, WYSIWYG editors etc.. etc.., that are the nice CMS UI fields to modify each column in my flights table

class Flight extends Resource
{
    public static $model = 'App\Flight';
    // ... list of fields I want to modify ...
}

Это прекрасно работает, и все, кроме того, что сейчас я хочу сделать два разных URL, например:

* `https://example.com/admin/resouces/flights-cancelled` - this should only list the equivalent of `SELECT * FROM flights WHERE status = 'cancelled'`
* `https://example.com/admin/resouces/flights-active` - this should only list the equivalent of `SELECT * FROM flights WHERE status = 'active'`

Все будет немного сложнее по мере развития моего проекта, поэтому мне было интересно, есть ли способ определить новую модель с именем App\FlightCancelled, которая точно такая же, как App\Flight, за исключением всех запросов к базе данных всегда будет включать WHERE status='cancelled' условие. Таким образом, я могу назначить App\FlightCancelled в качестве модели для моего ресурса Nova.

Интересно, как это сделать? Или есть ли лучший способ достичь моей цели?

1 Ответ

1 голос
/ 09 марта 2020

Вы можете изменить $table и переопределить newQuery() - метод, который Eloquent использует для создания нового запроса.

FlightCancelled

protected $table = 'flights'

public function newQuery($excludeDeleted = true)
{
    return parent::newQuery($excludeDeleted)
        ->where('status', '=', 'cancelled');
}

В этом случае я рекомендую использовать линзы , позволяющие полностью настроить базовый ресурс Eloquent запроса.

class FlightCancelled extends Lens
{
    public static function query(LensRequest $request, $query)
    {
        // Query here..
    }

    //
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...