web-dev-qa-db-ja.com

熱心な関係を無効にする

私のプロジェクトには、次のようなクラスで構成された熱心な関係を持つ多くのEloquentモデルがあります。

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

しかし、関係のない古いプレーンモデルだけが必要になることもあります。どういうわけか私はできますか:

Model::noRelations()->all()

クエリビルダーを使用したり、数回だけ別のクラスを作成したりする必要はありません。

16

モデルを空のままにするのではなく、モデルに$withプロパティを設定する必要がある場合は、次のように、熱心にロードする必要のある関係を手動でオーバーライドできます。

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

setEagerLoadsのAPIへのリンク

34
Thomas Kim

トーマスキムに加えて答えます。

とにかくEloquent\Modelクラスを拡張し、モデルから関係を取り除く必要がある場合は、このソリューションが適している可能性があります。

  1. デフォルトのモデルクラスでスコープを作成します。

    public function scopeNoEagerLoads($query){
        return $query->setEagerLoads([]);
    }
    
  2. そのクラスを拡張するORMの場合、次のことができるようになります。

    User::noEagerLoads()->all()
    
12

issues sayのように

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