在一个完全不相关的控制器 - 一个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' => ''
)
);
答案 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似乎很有帮助。查看“模型”代码