我有一个名为 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();
定义完整的类路径可以解决问题:
App\MyModel::withoutGlobalScope('App\Scopes\ArchiveScope')->get();
Run Code Online (Sandbox Code Playgroud)