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 如何在一个视图中显示来自三个相关模型的数据?的主要内容,如果未能解决你的问题,请参考以下文章

显示来自 Xib 的自定义视图

CakePHP 没有来自相关模型的数据

如何使用 CakePHP 从估计中获取总价以显示在 index.ctp 中

Cakephp 3:view.ctp求和两个变量

Cakephp,将视图添加到侧边栏

如何在 CakePHP 中保存相关数据?