0

アルバム、コンテンツ、ファイル、コメントのエンティティがあります。コメントとファイルはコンテンツの関係であり、コンテンツはアルバムに関連しています。

単一のコンテンツエンティティからすべてのリレーション(ファイルエンティティとコメントエンティティ)を取得したい(他のコンテンツにはロードしない)。データベースへのクエリは2つまでにする必要があります。

単一のクエリを使用してリレーションを取得し、エンティティオブジェクトにデータを入力する良い方法は何ですか?

例えば

$album = $em->createQuery('SELECT a,c FROM Album JOIN a.contents c WHERE a.id = :id')->getOneOrNullResult();

foreach ($album->getContents() as $content) {
    if ($content->getId() == $id) {
         // Load all (relevant) relations for this content in a single query with joins
         $em->MAGIC($content);
    }
}
4

1 に答える 1

0

これに対する解決策を見つけました。一度に 1 つのアルバムのメンバーにしかならないようにコンテンツを定義することで、次のようにコンテンツごとにアルバムに参加できます。

$dql = 'SELECT a,c,cc,cf,ac FROM Content c JOIN c.album a JOIN a.content ac JOIN c.comments cc JOIN c.file cf WHERE c.id = :id'

次に、Doctrine 2 マジックにより、返されたコンテンツが$album->contentsプロパティ内の同じオブジェクトも参照していることを確認します。

最終結果は、単一のクエリです。

于 2012-10-22T08:20:48.733 に答える