2012-03-27 19 views
0

symfony2フレームワークでdoctrineを使用しています。私は複数のテーマを持つことができるエンティティ「質問」を持っています。多対多関係では、doctrineとsymfony2のfindメソッドで関連するクラスデータを取得できません

manyToMany: 
    themes: 
     targetEntity: Theme 
     joinTable: 
     name: question_themes 
     joinColumns: 
      question_id: 
      referencedColumnName: id 
     inverseJoinColumns: 
      theme_id: 
      referencedColumnName: id 

質問のエンティティクラス内部:だから私は、この多対5月の関係はYMLに(また、他方のテーマで複数の質問を持つことができます)に定義

ここ
private $themes; 
public function setThemes($themes) { 
    $this->themes = $themes; 
} 
public function getThemes() { 
    return $this->themes; 
} 

を、question_themesですquestion-idとtheme_idの多対多関係を保持するテーブル(MySQLの場合)。私はで質問データをフェッチする際

は今:など

$questions = $this->getDoctrine()->getRepository('MyBundle:Question')->findAll(); 

または

$questions = $this->getDoctrine()->getRepository('MyBundle:Question')->findBy(
       array('locale'=>$locale), 
       array('createdAt' => 'DESC') 
      ); 

それが質問に伴い、すべての関連するテーマデータが

foreach($questions as $question) { 
    foreach($question->getThemes() as $theme) { 
     // some code 
    } 
} 

すべてが完璧と思われる。すなわちフェッチ。しかし、私はで質問データをフェッチするたび:

$question = $this->getDoctrine()->getRepository('MyBundle:Question')->find($question_id); 

または

$question = $this->getDoctrine()->getRepository('MyBundle:Question')->findById($question_id); 

など、関連テーマデータがフェッチされていないので、私は、foreachループでエラーを取得しています:

foreach($question->getThemes() as $theme) { 
    // some code 
} 

私はdoctrineとsymfony2の初心者なので、誰でも助けてくれますか?

おかげ

答えて

0

は、エンティティのセッターを少し変更してみてください。 setThemes(またはテーマエンティティでsetQuestions)を使用する代わりに、配列()であるため "add"関数を使用します。

また、その場合に備えてアノテーション参照をそこに記述します。

/** 
* @ORM\ManyToMany(targetEntity="Path\To\Entity\Theme", mappedBy="questions") 
*/ 
private $themes; 

public function addTheme(Theme $theme) 
{ 
    $this->themes[] = $theme; 
} 

public function getThemes() 
{ 
    return $this->themes; 
} 

テーマエンティティでこの変更を行います(ただし、mappedByの代わりにinversedByというアノテーションを使用します)。スキーマを更新して試してみてください。

+0

私はアノテーションの代わりにymlを使用していますので、quesionのようにスキーマを定義しました。私はエンティティgetter-setterをそれに応じて変更しましたが、私の問題は解決しませんでした。しかし、あなたのスキーマ定義によれば、多対多関係を含むquestion_themesテーブルはどこで指定できますか? – sumanchalki

+0

私が提供したコードに基づくアノテーションを使用すると、question_themesテーブルは、doctrine:schema:update --forceを呼び出した後に自動的に生成されます。http://tracehello.wordpress.com/2011/05/08/symfony2-doctrine2-manytomany-アソシエーション/ ymlの使用に関しては、正直言って私は自分のプロジェクトの一つにしか使用しておらず、manytomanyの関係は持っていませんでした。 – Shattuck

関連する問題