如何从另一个模型获取数据并将其传递给CakePHP中的视图?

时间:2014-07-07 17:15:53

标签: php templates cakephp

我在控制器中添加了这一行:

public $uses = array('DemandeFormation','Formation');

我读过它将允许我在我的控制器中使用Formation和DemandeFormation模型:DemandeFormationsController

这是我的功能,对我来说似乎是功能性的:

public function lister($id=null) {
    $options=array('conditions' => array('DemandeFormation.utilisateur_id' => $id));
    $this->set('demandes',$this->DemandeFormation->find('all',$options));
    $this->set('formations',$this->Formation->find('all',$options));
}

lister.ctp内容:

<?php
    foreach($demandes as $d)
    {
        $id=$d['DemandeFormation']['formation_id'];
        $nom=$formations['Formation'][$id];
        echo $nom;
    }
?>

执行操作后,我在浏览器上收到两个错误:

Undefined index: Formation [APP\View\DemandeFormations\lister.ctp]
Undefined index:  [APP\View\DemandeFormations\lister.ctp]

我的代码出了什么问题。我将非常感谢您的帮助和建议。

1 个答案:

答案 0 :(得分:0)

$formations返回

find('all'),因此它是一个用数字键索引的数组,如:

$formations = array(
    0 => array(
        'Formation' => array()
    ),
    1 => /* ... */
) ;

因此,您无法直接访问Formation,您需要能够使用id访问它。

最简单的方法是在belongsTo模型中添加DemandeFormation关系:

class DemandeFormation extends AppModel {
    /* ... */
    public $belongsTo = array(
        /* Nothing more because you kept CakePHP foreign key style. */
        'Formation'
    ) ;
    /* ... */
}

他们,您不需要使用Formation检索find('all'),并且可以使用foreach循环访问您的字段:

$d['Formation']['name'] 

其中nameFormation表中的字段。