我对 contains 有疑问:(,让我解释一下:
模型关系:
客户 -> hasMany -> 卡 -> hasAndBelongsToMany -> 合作伙伴 -> hasMany -> 联系人
我需要的是获取客户的所有合作伙伴和联系人,codigo = 24150 和 coords_lat = 38.71093 的联系人。
代码:
$conditions = array('conditions' =>
array('codigo' => '24150')
);
$contain = array(
'contain'=> array(
'Partner' => array(
'Contact' => array('conditions' => array('coords_lat' => '38.71093'))
)
)
);
$parceiros = $this->Client->find('all', array($conditions, $contain));
我已经添加了
var $actsAs = array('Containable');
到app_model.php
老实说,我真的不明白这里发生了什么...事实是 mysql 执行大量查询并花费大量时间,但我没有看到它通过“codigo = 24150”进行选择
我希望得到一些帮助。
提前致谢。
锐
您也可以将两个数组
$conditions
和$contain
分开..
并将最后一行更改为:
$parceiros = $this->Client->find('all', array_merge($conditions, $contain));
注意 array_merge 函数..
这应该可以解决您的问题,而无需为它们两个只使用一个数组
最终修复了这个问题,cakephp 不喜欢有条件并包含在不同的数组中。解决这个问题的方法是:
$conditions = array(
'conditions' => array('codigo' => '24150'),
'contain' => array(
'Card'=>array(
'Partner' => array (
'Contact' => array(
'conditions' => array('Contact.coords_lat' => '38.710930')
)
)
)
)
);
$parceiros = $this->Client->find('all', $conditions);
您应该收到一条错误消息,指出客户与合作伙伴无关。尝试以下方法
$this->Client->contain(
'Card'=>array('Partner' => array(
'Contact' => array('conditions' => array('coords_lat' => '38.71093'))
)
)
)
);
$parceiros = $this->Client->find('all', array('conditions' =>
array('Client.codigo' => '24150')
)
)