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".
Я знаю, что это старый вопрос, но я просто потратил целый день на борьбу с этим, я надеюсь сэкономить его на каком-нибудь другом бедняге, застрявшем с этой устаревшей версией торта там..