0

私はこのような構造を持っています: 単一のプロファイルは複数の調査に参加でき、各調査にはstatuteへの外部キーであるフィールドがありますstudy_statute。各行の HTML では、プロファイルの情報を表示する必要があります: profile.name、profile.study.field、profile.study.statute。私はこれを使って

$profileRepository->findAll()

しかし、それは多くのクエリを生成し、最適化したい. 現時点では、プロファイルを取得するクエリがあり、プロファイルごとに調査を要求し、調査ごとに法令名を要求します。したがって、2 つのプロファイルがあり、各プロファイルが 2 つの研究に参加している場合、

1 (リスト) +1 (プロファイル #1 の研究リスト) +2 (上記の各研究の研究名) +1 (プロファイル #2 の研究リスト) +2 (上記の各研究の研究名) クエリ。

これを最適化する方法は?

単純な PHP では、調査と調査名で結合されたすべてのプロファイルの大きなテーブルを取得し、それを多次元配列 fe に解析します$profile[1]['studies'][1]['name']

4

1 に答える 1

0

dql fetch joinを使用できます。

$profiles = $em->createQuery('select p, stu, sta from YourBundleName:Profile p join p.studies stu join stu.statute sta')
    ->getResult();

findAll結果は、 1 つを除いて使用した場合と同じになります。関連するすべてのエンティティがフェッチされます。"study" または "statute" にアクセスする場合、Doctrine はlazy load別のクエリと関連付ける必要はありません。

于 2012-05-23T12:32:40.423 に答える