代码之家  ›  专栏  ›  技术社区  ›  Tanmay

laravel全局查询作用域的withoutGlobalScope()未返回所需的记录

  •  2
  • Tanmay  · 技术社区  · 7 年前

    我有一个名为archivescope的全局查询作用域,它模拟了软删除的类似功能。该作用域的应用方法如下所示:

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

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

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

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

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Tanmay    7 年前

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

    App\MyModel::withoutGlobalScope('App\Scopes\ArchiveScope')->get();
    
        2
  •  0
  •   bestestefan    6 年前

    我通过声明类引用解决了这个问题

    use App \ Scopes \ NomeScope;
    
    
    $a = Model::withoutGlobalScope(NomeScope::class)->get();
    
    推荐文章