В Symfony я использую запрос, чтобы получить все вопросы и их относительные ответы из базы данных. Используя for
в ветке я пытаюсь отобразить в таблице все вопросы с относительными ответами строка за строкой. На данный момент я могу получить доступ и отображать только вопросы, но не ответы.
Отношения между моими сущностями Questions and Answers
является (один ко многим), таким образом, при поиске вопроса, также получаются ответы. Используя dump, я вижу, что ответы помещены в коллекцию Array.
Попытка получить только один вопрос из базы данных с другим запросом, используя getAnswers()
функция от моего Question
Я могу получить ответы из коллекции массивов с помощью этого оператора:
$answer = $question->getAnswers()->getValues();
Используя это утверждение, я попытался получить ответы на все вопросы, используя приведенный ниже код в контроллере, но я получаю эту ошибку:
Ошибка: вызов функции-члена getAnswers () для необъекта
Я считаю, что это потому, что запрос возвращает несколько вопросов, а не только один.
Как я могу получить ответы на каждый отдельный вопрос из коллекции Array? Заранее спасибо за помощь.
Код контроллера:
$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;
}
}
Код веточки:
{% 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 %}
Дамп скриншот данных из запроса:
С 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 %}
Других решений пока нет …