Игнорировать столбец со значением c по умолчанию в Eloquent - PullRequest
0 голосов
/ 09 июля 2020

Как заставить столбец работать так же, как deleted_at работает для SoftDelete. Т.е. если это null, модель возвращается, если у нее есть значение, пропустить ее?

У меня есть модель Student со столбцом graduated со значением по умолчанию -1:

Мне нужно сделать так, чтобы модели с:

value == 1

игнорировали его по умолчанию, как с deleted_at.

1 Ответ

0 голосов
/ 09 июля 2020

Вы можете сделать это, используя глобальные области видимости Laravel .

На вашей модели Student вы регистрируете осциллограф в его методе загрузки:

protected static function boot()
{
    parent::boot();

    static::addGlobalScope('onlyGraduated', function ($builder) {
        $builder->where('graduated', 1);
    });
}

Например, SoftDeletes имеет withTrashed, вы можете добавить локальную область, чтобы включить их, если хотите.

public function scopeWithUngraduated($query)
{
    $query->withoutGlobalScope('onlyGraduated');
}

Чтобы при вызове:

Student::query()->get() // only graduated students are returned

но

Student::query()->withUngraduated()->get() // all are returned

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

Совет: всегда не забудьте вызвать parent::boot() при переопределении метода загрузки.

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