Symfony从Array Collection

时间:2016-07-08 15:48:13

标签: php symfony arraycollection

在Symfony中,我使用查询从数据库中检索所有问题及其相关答案。在树枝中使用for我试图在表格中逐行显示所有相关答案的问题。目前我只能访问和显示问题而不能回答问题。 我的实体Questions and Answers之间的关系是(一对多),因此在检索问题时,也会检索答案。使用dump,我可以看到答案放在一个Array Collection中。

尝试使用另一个查询从数据库中获取一个问题,使用getAnswers()实体中的Question函数,我可以使用以下语句从数组集合中获取答案:

$answer = $question->getAnswers()->getValues();

使用此语句我尝试使用控制器中的波纹管代码获取所有问题的答案,但是我收到此错误:

  

错误:在非对象

上调用成员函数getAnswers()

我相信这是因为查询返回了多个问题而不只是一个问题。 如何从Array Collection中获取每个问题的答案?在此先感谢您的帮助。

控制器代码:

$question = $this->getDoctrine()
            ->getRepository('QuizBundle:Question')
            ->findByIdJoinedToCategory();
return $this->render('QuizBundle:Default:admin.html.twig', array('data' => $question));

问题库:

public function findByIdJoinedToCategory()
    {
        $query = $this->getEntityManager()
            ->createQuery(
                'SELECT a, q FROM QuizBundle:Question a
                JOIN a.answers q');
        try {
            return $query->getResult();
        } catch (\Doctrine\ORM\NoResultException $e) {
            return null;
        }
    }

Twig代码:

{% for item in data %}
              <tbody>
                <tr>
                    <th scope="row">{{ item.id }}</th>
                    <td>{{ item.image }}</td>
                    <td>{{ item.question }}</td>
                    <td></td>
                <tr>
               <tbody>

{% endfor %}

转储查询中数据的屏幕截图:

Query Data

1 个答案:

答案 0 :(得分:1)

使用Twig并根据您的学说查询,您可以显示如下问题/答案:

{% for item in data %}
    <tbody>
        <tr>
            <th scope="row">{{ item.id }}</th>
            <td>{{ item.image }}</td>
            <td>{{ item.question }}</td>
            {% for answer in item.answers %}
                {{ answer.id }}
            {% endfor %}
        <tr>
    <tbody>
{% endfor %}

顺便说一句,如果它存在两个实体问答的关系,并且你想显示所有问题及其关联答案,你可以直接这样做:

在您的控制器中:

$questions = $this->getDoctrine()
            ->getRepository('QuizBundle:Question')->findAll();
return $this->render('QuizBundle:Default:admin.html.twig', array('data' => $questions));

在你的树枝上:

{% for question in data %}
    <tbody>
        <tr>
            <th scope="row">{{ question.id }}</th>
            <td>{{ question.image }}</td>
            {% for answer in question.answers %}
                {{ answer.id }}
            {% endfor %}
        <tr>
    <tbody>
{% endfor %}