Symfony查询构建器和别名

时间:2016-07-02 13:36:22

标签: php doctrine-orm symfony query-builder

在Symfony中,我有两个相互关联的实体(问题,答案)。两个实体之间的关系是一对多(一个问题可以有很多答案)遵循Symfony关于两个实体之间关系的文档我使用的是由Symfony在答案实体中生成的question_id字段。在我的问题实体存储库中使用查询我试图得到一个问题及其所有答案,但是关于如何加入相关记录的文档Joining Related Records in Symfony我无法理解别名如何在Symfony中工作。 非常感谢理解别名的一些帮助。谢谢 这就是我在我的问题库类和我的控制器中所拥有的。目前,我得到一个答案结果,而不是与我的问题相关的所有答案。

public function findOneByIdJoinedToCategory($questionId)
    {
        $query = $this->getEntityManager()
            ->createQuery(
                'SELECT a, q FROM QuizBundle:Answer a 
                 JOIN a.answers q 
                 WHERE a.id = :id'
            )->setParameter('id', $questionId);

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

public function showAction($answerId)
    {
        $product = $this->getDoctrine()
            ->getRepository('QuizBundle:Answer')
            ->findOneByIdJoinedToCategory($answerId);

        $data = $product->getAnswer();

        return new Response($data);

        // ...
    }

我的实体之间的关系:

class Answer
{

    /**
     * @ORM\ManyToOne(targetEntity="Question", inversedBy="answers")
     * @ORM\JoinColumn(name="question_id", referencedColumnName="id")
     */
    private $question;

public function setQuestion(\QuizBundle\Entity\Question $question = null)
    {
        $this->question = $question;
        return $this;
    }
    /**
     * Get question
     *
     * @return \QuizBundle\Entity\Question
     */
    public function getQuestion()
    {
        return $this->question;
    }
}


 class Question
{
    /**
     * @ORM\OneToMany(targetEntity="Answer", mappedBy="question")
     */
    private $answers;
    public function __construct()
    {
        $this->answers = new ArrayCollection();
    }

    public function addAnswer(\QuizBundle\Entity\Answer $answer)
    {
        $this->answers[] = $answer;
        return $this;
    }

    /**
     * Remove answer
     *
     * @param \QuizBundle\Entity\Answer $answer
     */

    public function removeAnswer(\QuizBundle\Entity\Answer $answer)
    {
        $this->answers->removeElement($answer);
    }

    /**
     * Get answers
     *
     * @return \Doctrine\Common\Collections\Collection
     */

    public function getAnswers()
    {
        return $this->answers;
    }

  }

1 个答案:

答案 0 :(得分:1)

你的问题更多地涉及Doctrine而不是Symfony。您应该查看与Association Mapping相关的Doctrine文档。

OneToMany关系有多种形式。您可能需要的是QuestionAnswer之间的bidirectional OneToMany relation。这样,您可以提出如下请求:

SELECT q, a FROM QuizBundle:Question q JOIN q.answers a WHERE q.id = :id