Deep Containable关联在cakephp 1.3.0中不起作用

时间:2012-04-20 09:38:13

标签: cakephp cakephp-1.3 containable

我的模特中有以下关系

BasicIndexing属于申请人

申请人有许多请求

因此我想检索BasicIndexing模型并包含申请人模型和申请人对应的请求,如下面的代码所示

$fullCondition = array(
    'contain' => array(
        'Applicant' => array(
            'Request',
            'fields'=>array('Applicant.surname','Applicant.first_name','Applicant.id')
        )
    ),
    'conditions' =>  $conditions,
    'fields'=>array('BasicIndexing.application_date','BasicIndexing.application_number')
);
$this->loadModel('BasicIndexing');
$searchResult = $this->BasicIndexing->find('all',$fullCondition);

问题是返回$searchResult的结果根本不包含Request模型。它仅包含Applicant模型并忽略Request模型。我尝试使用与申请人无关的模型,并且我得到模型未与申请人模型相关联的警告。

Array
(
    [0] => Array
        (
            [BasicIndexing] => Array
                (
                    [application_date] => 2012-04-17
                    [application_number] => BIA170420124356
                )

            [Applicant] => Array
                (
                    [surname] => Kermit
                    [first_name] => Frog
                    [id] => 4f8d3b63-c2bc-48a1-9fb5-0290c982293d
                )
        )
)

是否有任何错误或蛋糕1.3.0发布存在问题?

任何帮助都将受到高度赞赏。

感谢。

2 个答案:

答案 0 :(得分:0)

认为是因为你的fields数组。您需要将Request.*添加到现有的fields数组中,或者将fields数组添加到Request

所以它应该看起来像下面两个例子之一:

$fullCondition = array(
    'contain' => array(
        'Applicant' => array(
            'fields'=>array('Applicant.surname','Applicant.first_name','Applicant.id'),
            'Request' => array(
                'fields' => array('*')
            )
        )
    ),
    'conditions' =>  $conditions,
    'fields'=>array('BasicIndexing.application_date','BasicIndexing.application_number')
);

$fullCondition = array(
    'contain' => array(
        'Applicant' => array(
            'fields'=>array('Applicant.surname','Applicant.first_name','Applicant.id', 'Request.*'),
            'Request'
        )
    ),
    'conditions' =>  $conditions,
    'fields'=>array('BasicIndexing.application_date','BasicIndexing.application_number')
);

答案 1 :(得分:0)

我遇到了同样的问题。基本上,包含是不稳定的,并且会返回相关联的“属于”的结果。关系,但不是“有很多人”的关系。我只需要一个级别的递归,结果证明' 1'对于递归声明(以及-1和0)是一个特殊的东西。因此,获取我想要的数据的唯一方法是使用笨重的递归'声明,但要将其设置为不必要的高度' 2'。

我知道这是一个古老的问题,但我只是花了一整天的时间来解决这个问题,我希望能够把它留给其他一些可怜的笨蛋,那个过时的蛋糕就在那里了......