禁用热切关系

Disable eager relations

在我的项目中,我有许多 Eloquent 模型在 class 中配置了热切关系,如下所示:

protected $with = [ 'countries', 'roles' ];

但有时我只需要没有任何关系的旧普通模型。我可以做些什么吗:

Model::noRelations()->all()

真的不想使用查询生成器,也不想创建另一个 class 只是为了少数场合。

如果您必须在模型上设置 $with 属性 而不是将其留空,您可以手动覆盖需要预先加载的关系,如下所示:

Model::setEagerLoads([])->get();

Link to API for setEagerLoads

除了 Thomas Kim 的回答。

如果您无论如何都要扩展 Eloquent\Model class 并且经常需要从模型中剥离关系,此解决方案可能很适合您。

  1. 在默认模型中创建作用域class:

    public function scopeNoEagerLoads($query){
        return $query->setEagerLoads([]);
    }
    
  2. 对于任何 ORM,扩展 class 您将能够:

    User::noEagerLoads()->all()
    

就像issues说的那样

Model::without(['countries', 'roles' ])->all();