Я ищу способ получить результаты запроса, который использует Containable
поведение должно быть отформатировано так же, как find('list')
результаты есть. Например.:
$this->ModelA->find('all', array(
'contain' => array(
'ModelB' => array(
'ModelC' => array(
// This does NOT work but I need ModelC's fields to be formatted as an associative array where IDs are keys and names are values
'fields' => array('id' => 'name')
)
)
)
));
НОТА: Установка рекурсии в 1 или 2 вместо использования Containable
является не вариант, если нет доступного решения с Containable
,
Я не уверен, что вы можете вернуть возвращенные содержащиеся данные в нужном вам формате, но вы можете изменить их после нахождения. То, как Cake на самом деле строит доход от find('list')
использует Hash::combine()
. Таким образом, вы можете изменить возвращенные данные, используя это, чтобы сделать список просмотра данных find('list')
вернуть:-
$data = [
[
'id' => 1,
'name' => 'Foo'
],
[
'id' => 2,
'name' => 'Bar'
]
];
$results = Hash::combine($data, '{n}.id', '{n}.name');
Это вернется:
[
1 => 'Foo',
2 => 'Bar'
]
Не уверен, что именно ваш find('all')
данные выглядят так, как будто вы не предоставили ассоциации, но, вероятно, вы можете сделать что-то вроде этого:
foreach ($data as &$row) {
$row['ModelB']['ModelC'] = Hash::combine(
$row['ModelB']['ModelC'],
'{n}.id',
'{n}.name'
);
}
$ This-> ModelA-> Behaviors-> нагрузки ( ‘Containable’);
$ this-> ModelA-> find (‘all’, array (
‘содержать’ => массив (‘ModelB’, ‘ModelC’ => массив (‘fields’ => array (‘id’, ‘name’))
)
)
);
Пожалуйста, убедитесь, что вы создали ассоциацию модели