Laravel 全局查询范围的 withoutGlobalScope() 不返回所需的记录

Tan*_*may 5 php laravel

我有一个名为 ArchiveScope 的全局查询范围,它模仿了软删除的类似功能。该范围的 apply 方法如下所示:

public function apply(Builder $builder, Model $model)
{
    $builder->where('archived_at', '=', NULL);
}
Run Code Online (Sandbox Code Playgroud)

因此,当我使用 时MyModel::all(),它返回所有没有时间戳(即 NULL)的行。但是当我想获取所有记录(包括存档)时,我仍然得到相同的结果。我正在修补程序中运行此语句:

App\MyModel::withoutGlobalScope(ArchiveScope::class)->get();

奇怪的是,当我使用withoutGlobalScopes()而不是withoutGlobalScope(ArchiveScope::class)获得所有记录时。

App\MyModel::withoutGlobalScopes()->get();

Tan*_*may 8

定义完整的类路径可以解决问题:

App\MyModel::withoutGlobalScope('App\Scopes\ArchiveScope')->get();
Run Code Online (Sandbox Code Playgroud)