CakePHP Как отобразить данные из трех связанных моделей в одном представлении?

Я пытаюсь создать приложение, в котором вы можете создавать и отвечать на вопросы.
Создание части уже сделано, и я могу сохранить тесты, вопросы и ответы.

Отношения между ними:

Test $hasMany Question
Question $hasMany Answer

Я создал viewTest, который показывает один выбранный тест и связанные вопросы, используя foreach:

echo $test['Test']['id'];
echo '</br>';foreach ($test['Question'] as $question){
echo $question['text'];
echo '<br>';

Как я могу получить данные Ответа, связанные с каждым Вопросом?

*РЕДАКТИРОВАТЬ *

Тестовая модель отношения:

public $hasMany = array('Question' => array('className' => 'Question', 'foreignKey' => 'idTest'));

Где idTest — это внешний ключ в базе данных

Модель вопроса отношения:

public $belongsTo = array('Test' => array('className' => 'Test', 'foreignKey' => 'idTest'));

public $hasMany = array('Answer' => array('className' => 'Answer', 'foreignKey' => 'idQuestion'));

Ответ Модель отношения:

public $belongsTo = array('Question' => array('className' => 'Question', 'foreignKey' => 'idQuestion'));

Тест возвращается:

 array (size=2)
'Teste' =>
array (size=4)
'id' => string '2' (length=1)
'dataLimite' => string '2014-09-25' (length=10)
'valorTeste' => string '2' (length=1)
'numQuestoes' => string '2' (length=1)
'Questao' =>
array (size=2)
0 =>
array (size=3)
'id' => string '3' (length=1)
'idTeste' => string '2' (length=1)
'descricao' => string 'questao1 ' (length=9)
1 =>
array (size=3)
'id' => string '4' (length=1)
'idTeste' => string '2' (length=1)
'descricao' => string 'dfsdfa' (length=6)

И в том же представлении для теста, возвращается вопрос:

    array (size=3)
'id' => string '3' (length=1)
'idTeste' => string '2' (length=1)
'descricao' => string 'questao1 ' (length=9)

РЕДАКТИРОВАТЬ

В представлении Вопрос возвращается вопрос:

array (size=3)
'Questao' =>
array (size=3)
'id' => string '3' (length=1)
'idTeste' => string '2' (length=1)
'descricao' => string 'questao1 ' (length=9)
'Teste' =>
array (size=4)
'id' => string '2' (length=1)
'dataLimite' => string '2014-09-25' (length=10)
'valorTeste' => string '2' (length=1)
'numQuestoes' => string '2' (length=1)
'Alternativa' =>
array (size=2)
0 =>
array (size=5)
'id' => string '1' (length=1)
'idQuestao' => string '3' (length=1)
'isRespostaCerta' => boolean false
'respostaUsuario' => null
'descricao' => string 'alternativa 1' (length=13)
1 =>
array (size=5)
'id' => string '2' (length=1)
'idQuestao' => string '3' (length=1)
'isRespostaCerta' => boolean true
'respostaUsuario' => null
'descricao' => string 'alternativa 2' (length=13)

0

Решение

Вы уже пробовали использовать foreach () в $ question [‘Answer’]? Попробуйте отладку ($ question) и посмотрите, получит ли она массив ответов. Иногда вам нужно $ hasAndBelongsToMany.

0

Другие решения

РЕШИТЬ

На моем TestsController я создал метод viewTests, который получает данные, где Test.id = $ id (из таблицы индекса);

 $test = $this->Test->findById($id);

Затем я пишу в Session это $ id и перенаправляю в QuestionsController

    $this->Session->write('idTest',$id);

return $this->redirect(array('controller' => 'questions','action' => 'viewTest'));

На контроллере QuestionController я создал еще один viewTests, который считывает информацию из Session $ idTest.

$idTest = $this->Session->read('idTest');
$this->set('idTest', $idTest);

А потом я ищу вопросы, связанные с тестом

$this->loadModel('Question');

$questoes = $this->Question->find('all', array(
'conditions' => array('Question.idTest'=>$idTest)
));
$this->set('questions', $questions);

My tests_view для получения ответов:

foreach ($questions as $question){

foreach ($question['Answer'] as $answer){}
}
0

По вопросам рекламы [email protected]