0

私はこのようなエンティティを持っています:

Person
  - id_person
  - name
  - child //self refering

再帰関数で person エンティティをクエリすると、最初の 3 つのレベルのみが返されます。多くのレベルが必要なため、深くなりたいことをドクトリンに伝える方法を知っていますか?

編集

なにが問題だったの?
を使用$queryBuilder->getquery()->getResult(Query::HIDRATE_ARRAY);するのは、再帰関数を作成する最良の方法ではありません。デフォルトのハイドレーションを使用する必要があります。

どうすれば解決できますか?@Andreas Lindenが言うように、ゲッター
を使用して呼び出します:$queryBuilder->getquery()->getResult();$parent->getChild()

4

1 に答える 1

0

モデル内からアクセスすると、すべての関連付けが遅延ロードされます (別の動作を定義しない場合)。そのため、常に getter メソッドを使用getChild()してください。return $this->child;

必要な数のレベルを左結合することもできるため、何千ものクエリ (子ごとに 1 つのクエリ) を生成しません。

$query = $entityManager->createQueryBuilder()
    ->select('p1, p2, p3, p4, p5, p6')
    ->from('Entity\Person', 'p1')
    ->leftJoin('p1.child', 'p2')
    ->leftJoin('p2.child', 'p3')
    ->leftJoin('p3.child', 'p4')
    ->leftJoin('p4.child', 'p5')
    ->leftJoin('p5.child', 'p6')
    ->createQuery();
于 2012-10-02T18:28:31.940 に答える