私はdoctrineクエリを持っています。doctrineを正しく使ってクエリを分割する
$object = $this->createQueryBuilder('object')
->leftJoin('object.element', 'element')->addSelect('element')
->leftJoin('object.element2', 'element2')->addSelect('element2')
->leftJoin('object.many', 'many')->addSelect('many')
->leftJoin('many.element3', 'element3')->addSelect('element3')
->leftJoin('many.element4', 'element4')->addSelect('element4')
->where('object.id = 1')
->getQuery()
->getSingleResult();
実際のクエリでは、より多くのジョインがあり、多くのメモリが必要になり、dbのパフォーマンスは良くありません。ネイティブSQLでは、それを分割して正しくロードします。私がやりたいことは、最初のクエリオブジェクトといくつかの基本的な結合データを読み込むことです。これは、次のようになります。
$object = $this->createQueryBuilder('object')
->leftJoin('object.element', 'element')->addSelect('element')
->leftJoin('object.element2', 'element2')->addSelect('element2')
->where('object.id = 1')
->getQuery()
->getSingleResult();
は今、私はまたmany
、many.element3
とmany.element4
をロードします。別のクエリで。 doctrine lazy loading機能を使用すると、foreachというSQLクエリが作成されますが、これは1つのクエリとしてのみ必要です。
その関係でEAGER
を設定することは可能ですが、私はこのクエリのために一時的にEAGER
にしたいと思っています。