2016-07-08 3 views
1

В Symfony Я использую запрос для извлечения всех вопросов и их относительных ответов из базы данных. Используя for в twig Я пытаюсь отобразить в таблице все вопросы с относительными ответами подряд за строкой. На данный момент я могу получить доступ и отображать только вопросы, но не ответы. Соотношение между моими объектами Questions and Answers (от одного до многих), таким образом, при получении вопроса также получаются ответы. Используя дамп, я вижу, что ответы помещаются в коллекцию массивов.Symfony извлекает данные из коллекции Array

Попытка получить только один вопрос из базы данных с другим запросом, используя функцию getAnswers() от моего Question сущности, я могу получить ответы из коллекции массива, используя эту инструкцию:

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

Использование этого заявление, которое я пытался получить ответы на все вопросы, используя сильфон код в контроллере, но я получаю эту ошибку:

Error: Call to a member function getAnswers() on a non-object

Я считаю, что это происходит потому, что запрос возвращает несколько вопросов и не JUS т. Как я могу получить ответы на каждый отдельный вопрос из коллекции массивов? Заранее спасибо за помощь.

Controller Код:

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

Вопрос Repository:

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

С 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 %} 

Btw, если она существует связь между двумя сущностями Вопросы и ответы, и вы хотите, чтобы отобразить все вопросы и их ассоциативные ответы, вы можете сразу это сделать:

В контроллере:

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

В вашем Twig:

{% 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 %} 
+0

Я получаю эту ошибку: 'Невозможно получить доступ к атрибуту («ответы») на переменную строки («Q1_Question1») в QuizBundle: По умолчанию: admin.html.twig на линии 28' – Otonel

+0

Мой плохо, я исправь это. –

+0

Спасибо. Это очень помогло, и это сработало. – Otonel