Я пытаюсь создать приложение, в котором вы можете создавать и отвечать на вопросы.
Создание части уже сделано, и я могу сохранить тесты, вопросы и ответы.
Отношения между ними:
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)
Вы уже пробовали использовать foreach () в $ question [‘Answer’]? Попробуйте отладку ($ question) и посмотрите, получит ли она массив ответов. Иногда вам нужно $ hasAndBelongsToMany.
РЕШИТЬ
На моем 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){}
}