我有3张桌子。
现在,如果我$this->Device->find('all');
,它会给我结果:
Device => array
DeviceGroup => array
现在我也想要Group表中的值,我该怎么做?
答案 0 :(得分:1)
有几种方法可以实现这一目标。
可能很简单:
$this->Device->find('all', array('recursive' => 2));
但如果您有其他可以自动检索的模型,那么这可能会非常耗费资源并浪费资源。
另一种方法是将Group类添加到您的Device模型中:
var $hasOne = array(
'DeviceGroup' => array(
'className' => 'DeviceGroup',
'foreignKey' => 'device_group_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => ''
),
'Group' => array(
'className' => 'Group',
'foreignKey' => false,
'dependent' => false,
'conditions' => 'Group.id = DeviceGroup.group_id',
'fields' => '',
'order' => ''
)
);
当您在查找中已经拥有Group时,尝试从另一个自动包含设备组关系的模型执行查找时,这可能会出现问题。所以最好在$ hasOne中给它命名,比如'DeviceGroupGroup',这很痛苦。
我首选的方法是启用Containable行为(我在app/app_model.php
执行此操作,以便所有模型都自动包含启用):
class AppModel extends Model {
var $actsAs = array('Containable');
}
然后无需将Group添加到设备模型中即可执行此操作:
$this->Device->find(
'all',
array(
'contain' => array('DeviceGroup', 'Group'),
'recursive' => 2,
)
);
这样,即使您进行相对较深的递归,您也只是检索实际需要的模型,如果您还使用'fields'
上的find
参数,那么