Вы можете сделать это, используя глобальные области видимости 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()
при переопределении метода загрузки.