2012-03-11 20 views
1

私は3つのエンティティ:User,Answer、およびQuestionを持っています。Symfony - Doctrine ORMでの外部結合の使用

UserAnswerの間にOneToMany関係があり、ManyToOne関係がAnswerQuestionの間にあります。基本的には、特定のユーザーが複数の質問に答えることができます。

私がORMの世界で達成しようとしているのは、特定のユーザーに対してすべての質問とその回答を取得していることです。重要な部分は、ユーザーが特定の質問に回答していない可能性がありますが、私はまだその質問を(無回答で)取得したいということです。

私のAnswerエンティティには、Userエンティティにマップされる 'user'フィールドがあり、Userエンティティ内の 'answers'フィールドで反転されています。 Userエンティティ内のこの「回答」フィールドを使用すると、ユーザーが実際に回答した質問/回答のペアのみが取得されます。ユーザーがではないと回答した質問はありません。と回答しました。

通常、生のSQLを使用すると、質問と回答の表の間に単純な「左外部結合」が含まれますが、DoctrineのORMを使用してこれを行う必要があります。助言がありますか?私はORMの世界にはかなり新しいです。

+0

解決策を新しい回答に移動し、それを「受け入れる」(緑色のダニ)! :) – biziclop

答えて

2

私はそれを行いました!方法は次のとおりです。

私は自分のQuestionエンティティに、その特定の質問について、すべてのユーザーからすべての回答を含むフィールドを作成しました。エンティティAnswerとのOneToMany関係でマップされます。そして、我々は、私は私のQuestionエンティティのカスタムリポジトリを作成し、次の関数を作成し、特定のユーザーのための答えにそのリストを制限することを確認する:

public function findAllJoinedToAnswer($user) 
{ 
    $query = $this->getEntityManager() 
     ->createQuery(' 
      SELECT q, a 
      FROM Bundle:Question q 
      LEFT JOIN q.answers a 
      WITH a.user = :user' 
     )->setParameter('user', $user); 

    try{ 
     return $query->getResult(); 
    }catch (\Doctrine\ORM\NoResultException $e) { 
     return null; 
    } 
} 

ただUserエンティティのインスタンスに渡し、出来上がり!

関連する問題