我有一个名为ArchiveScope的全局查询范围,它模仿了Soft Deletion的类似功能。该范围的apply方法如下所示:
public function apply(Builder $builder, Model $model)
{
$builder->where('archived_at', '=', NULL);
}
因此,当我使用MyModel::all()
时,它会返回所有没有时间戳的行(即NULL)。但是当我想获取所有记录(包括存档)时,我仍然得到相同的结果。我在修补程序中运行此语句:
App\MyModel::withoutGlobalScope(ArchiveScope::class)->get();
奇怪的是,当我使用withoutGlobalScopes()
代替withoutGlobalScope(ArchiveScope::class)
时,我会获得所有记录。
App\MyModel::withoutGlobalScopes()->get();
答案 0 :(得分:2)
定义完整的类路径可以解决问题:
App\MyModel::withoutGlobalScope('App\Scopes\ArchiveScope')->get();
答案 1 :(得分:0)
我只声明了类引用就解决了这个问题
use App \ Scopes \ NomeScope;
$a = Model::withoutGlobalScope(NomeScope::class)->get();
答案 2 :(得分:-1)
和其他人一样,我通过使用全命名空间解决了这个问题,但是很长一段时间以来,我并不是很明显。
我正在使用
StoreItem::withoutGlobalScope(App\Scopes\CompletedStoreItems::class)->where('id',$id)->get();
如果我将其复制并粘贴到 tinker 中,它会起作用,但在我的代码中不起作用。结果是因为我在 \
之前没有 App
它实际上正在寻找
App\Models\App\Scopes\CompletedStoreItems
这是错误的并且很难调试。
确保将 \
放在 App
之前
ps。上面 Tanmay 的代码有效,因为他使用的是字符串。