CakePHP 如何在一个视图中显示来自三个相关模型的数据?
Posted
技术标签:
【中文标题】CakePHP 如何在一个视图中显示来自三个相关模型的数据?【英文标题】:CakePHP How to display the data from three related models in one view? 【发布时间】:2014-09-26 00:34:35 【问题描述】:我正在尝试创建一个应用程序,您可以在其中创建和回答测验。 创建部分已经完成,我可以保存测试、问题和答案。
它们之间的关系:
Test $hasMany Question
Question $hasMany Answer
我使用 foreach 创建了一个 viewTest,它显示了一个选定的测试及其相关问题:
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 是数据库中的 foreignKey
问题模型关系:
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)
【问题讨论】:
测试 $hasMany 问题 -- 问题 $hasMany 答案;两个语句中的Question
是一样的吗?如果是,那么类似:echo $question['answers']
在您的问题模型中,您是否描述了问题和答案之间的关系??
【参考方案1】:
您是否已经在 $question['Answer'] 尝试过 foreach() ?尝试 debug($question) 并查看它是否检索到答案数组。有时你需要一个 $hasAndBelongsToMany。
【讨论】:
$question 在这个视图中没有答案信息;注意(8):未定义的索引和警告(2):为 foreach() 提供的参数无效;【参考方案2】:已解决
在我的 TestsController 上,我创建了一个 viewTests 方法来获取数据 where Test.id = $id(From the index table);
$test = $this->Test->findById($id);
然后我在 te Session 中写入 $id 并重定向到 QuestionsController
$this->Session->write('idTest',$id);
return $this->redirect(array('controller' => 'questions','action' => 'viewTest'));
在 QuestionController 上,我创建了另一个从 Session $idTest 信息中读取的 viewTests。
$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);
我的测试视图来检索答案:
foreach ($questions as $question)
foreach ($question['Answer'] as $answer)
【讨论】:
以上是关于CakePHP 如何在一个视图中显示来自三个相关模型的数据?的主要内容,如果未能解决你的问题,请参考以下文章