Deep Containable ассоциации не работают в CakePHP 1.3.0

У меня есть следующие отношения в моих моделях

Базовый индекс принадлежит заявителю

Заявитель имеет много запросов

Поэтому я хотел бы получить модель 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 модель запроса вообще не содержит. Он содержит только модель кандидата и игнорирует модель запроса. Я попытался использовать модель, не связанную с Заявителем, и получил предупреждение о том, что модель не связана с моделью Заявителя.

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 ответа

Я думаю это из-за твоей 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')
);

У меня просто была такая же проблема. По сути, содержать ошибочно и будет возвращать результаты связанного отношения "отношение", но не результаты "hasMany". Мне нужен был только один уровень рекурсии, и оказалось, что "1" - это особая вещь для рекурсивного объявления (вместе с -1 и 0). Таким образом, мой единственный способ получить данные, которые я хотел, - это использовать неуклюжую "рекурсивную" декларацию, но установить для нее ненужный высокий "2".

Я знаю, что это старый вопрос, но я просто потратил целый день на борьбу с этим, я надеюсь сэкономить его на каком-нибудь другом бедняге, застрявшем с этой устаревшей версией торта там..

Другие вопросы по тегам