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の初心者なので、誰でも助けてくれますか?
おかげ
私はアノテーションの代わりにymlを使用していますので、quesionのようにスキーマを定義しました。私はエンティティgetter-setterをそれに応じて変更しましたが、私の問題は解決しませんでした。しかし、あなたのスキーマ定義によれば、多対多関係を含むquestion_themesテーブルはどこで指定できますか? – sumanchalki
私が提供したコードに基づくアノテーションを使用すると、question_themesテーブルは、doctrine:schema:update --forceを呼び出した後に自動的に生成されます。http://tracehello.wordpress.com/2011/05/08/symfony2-doctrine2-manytomany-アソシエーション/ ymlの使用に関しては、正直言って私は自分のプロジェクトの一つにしか使用しておらず、manytomanyの関係は持っていませんでした。 – Shattuck