在模型展示中禁用全局作用域?

时间:2020-05-22 09:51:07

标签: laravel

我有一个名为project的模型,可以将其归档。存档的项目不会显示在索引页面上,而我可以通过在Project模型上使用全局作用域来实现:

class ArchiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('archived', false);
    }
}

然后在Project模型中,我有:

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

        static::addGlobalScope(new ArchiveScope);
    }

但是,我有一个页面显示所有已归档的项目,用户应该能够单击每个项目,查看内容,并在需要时取消归档项目。但是由于全局范围,它将不会显示该项目。当我转到/ projects / {project_id}的存档项目时,它给我404 not found错误。没有GlobalScope的情况下如何申请Project的show操作?

谢谢。

2 个答案:

答案 0 :(得分:4)

你可以做到

client

答案 1 :(得分:0)

那是你的事:https://laravel.com/docs/7.x/eloquent

如果要删除所有全局范围:

Model::withoutGlobalScopes()->get();

或者如果您要删除其中一些:

Model::withoutGlobalScopes([
    Model1::class, Model2::class, etc...
])->get();

就您而言,您可以只写:

Project::withoutGlobalScope(ArchiveScope::class)->get();