cakephp - 使用loadmodel并获取与加载的模型相关的数据

时间:2013-12-04 16:10:37

标签: php cakephp

在一个完全不相关的控制器 - 一个DoctorsController中,我需要从我的ChildMedicine模型中获取一些信息,以及它自己的相关医学模型中的药物名称。所以在我的(无关的)DoctorsController控制器中我使用:

$this->loadModel('ChildrenMedicine');
$this->ChildrenMedicine->recursive = 2;
$childsMeds = $this->ChildrenMedicine->find('all', array('conditions'=>array('child_id'=>$child)));

我希望这能让我得到一个包含孩子目前使用的所有药物的数组,以及药物表中的信息,这样我就能得到这个名字。但它只给了我:

$childsMeds[0]['ChildrenMedicine']
$childsMeds[1]['ChildrenMedicine']

而我希望

$childsMeds[0]['ChildrenMedicine']
$childsMeds[0]['Medicine']
$childsMeds[0]['Child']
$childsMeds[1]['ChildrenMedicine']
$childsMeds[1]['Medicine']
$childsMeds[1]['Child']

任何人都可以启发我吗?

编辑 - 我的儿童医学模型协会:

public $belongsTo = array(
    'Child' => array(
        'className' => 'Child',
        'foreignKey' => 'child_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Medicine' => array(
        'className' => 'Medicine',
        'foreignKey' => 'medicine_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

2 个答案:

答案 0 :(得分:1)

使用可控行为。

$this->loadModel('ChildrenMedicine');
$this->ChildrenMedicine->Behaviors->load('Containable');
$childsMeds = $this->ChildrenMedicine->find('all', 
                  array(
                      'conditions' => array('child_id'=>$child),
                      'contain' => array('Child', 'Medicine')
                  ));

答案 1 :(得分:0)

另一种方法是使用连接来解决此问题。依赖于设置递归= 2是一个更好的选择。

    $data = $this->ChildrenMedicine->find('all', array('conditions' => array('child_id'=>$child),  'joins' => array(  
            array( 
                'table' => 'medicines', 
                'alias' => 'Medicine', 
                'type' => 'inner', // could also do outter
                'foreignKey' => false, 
                'conditions'=> array('ChildrenMedicine.medicine_id= Medicine.medicine_id')  
            ))));

您可以在joins here

上阅读更多内容

设置HABTM关系this article似乎很有帮助。查看“模型”代码