cakephp 包含

问题描述 投票:0回答:3

我对 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”进行选择

我希望得到一些帮助。

提前致谢。

php cakephp contains containable
3个回答
2
投票

您也可以将两个数组

$conditions
$contain
分开..

并将最后一行更改为:

$parceiros = $this->Client->find('all', array_merge($conditions, $contain));

注意 array_merge 函数..
这应该可以解决您的问题,而无需为它们两个只使用一个数组


1
投票

最终修复了这个问题,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);

1
投票

您应该收到一条错误消息,指出客户与合作伙伴无关。尝试以下方法

$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')
                                            )
                                  )
© www.soinside.com 2019 - 2024. All rights reserved.