私は現在、希望する言語で試験を受け、レベルを評価できる言語評価プロジェクトに取り組んでいます。私は Symfony2 フレームワークを使用し、Doctrine2 も使用しています。私の問題は次のとおりです。
多対多の関係 (Exam が所有者) によってリンクされた 2 つのエンティティ Exam と Question があります。各試験は複数の問題に関連付けることができ、各問題は複数の試験に関連付けることができます。
これが私のコードです:
試験体
/**
* Exam
*
* @ORM\Table(name="cids_exam")
* @ORM\Entity(repositoryClass="LA\AdminBundle\Entity\ExamRepository")
*/
class Exam
{
...
/**
* @ORM\ManyToMany(targetEntity="LA\AdminBundle\Entity\Question", cascade={"persist"})
* @ORM\JoinTable(name="cids_exam_question")
*/
private $questions;
...
/**
* Constructor
*/
public function __construct()
{
$this->questions = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add questions
*
* @param \LA\AdminBundle\Entity\Question $questions
* @return Exam
*/
public function addQuestion(\LA\AdminBundle\Entity\Question $questions)
{
$this->questions[] = $questions;
return $this;
}
/**
* Remove questions
*
* @param \LA\AdminBundle\Entity\Question $questions
*/
public function removeQuestion(\LA\AdminBundle\Entity\Question $questions)
{
$this->questions->removeElement($questions);
}
/**
* Get questions
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getQuestions()
{
return $this->questions;
}
}
一方向の関係である限り、私の Question クラスには「exams」属性はありません。
ここで、次のように getQuestions() メソッドを呼び出して、特定の試験に関連するすべての問題を取得したいと考えています。
$questions = $exam->getQuestions();
しかし、データベースにデータがある場合でも、このメソッドは空の配列を返します。$exam 変数を var_dump すると、質問配列が空であることがわかります。
object(LA\AdminBundle\Entity\Exam)[47]
private 'id' => int 5
...
private 'questions' =>
object(Doctrine\ORM\PersistentCollection)[248]
private 'snapshot' =>
array (size=0)
empty
private 'owner' => null
private 'association' => null
private 'em' => null
private 'backRefFieldName' => null
private 'typeClass' => null
private 'isDirty' => boolean false
private 'initialized' => boolean false
private 'coll' =>
object(Doctrine\Common\Collections\ArrayCollection)[249]
private '_elements' =>
array (size=0)
...
QuestionRepository に findByExam() 関数を記述できると思いますが、この場合の結合の実装方法がよくわかりません。
どんな助けでも素晴らしいでしょう!