Redundant ModelName в CakePHP найти результаты
Я пытаюсь избавиться от избыточных имен моделей в массиве результатов, возвращаемом методом find в CakePHP. Как и сейчас, если бы я должен был сделать что-то вроде $results = $this- > Model- > find ('all'), мне пришлось бы получить доступ к полю результата по $results [Model] [fieldName] вместо $results [FIELDNAME].
Я понимаю, что наличие имени модели в массиве имеет преимущества, но я пытаюсь построить api, поэтому мне нужно json закодировать массив. При включенном имени модели я получаю что-то отвратительное, как:
[{"Model":{"field":"blah","field":"blah"}},{"Model":{"field":"blah","field":"blah"}}]
Мне нужно что-то более элегантное, как:
[{"field":"blah","field":"blah"},{"field":"blah","field":"blah"}]
Любые идеи?
Ответы
Ответ 1
В вашем контроллере вместо сериализации результатов поиска, сериализуйте уровень глубже.
Предполагая, что CakePHP 2:
$things = $this->Thing->find('all');
$things = Set::extract('/Thing/.', $things);
Теперь ваши результаты должны быть свободны от дополнительного уровня в вашем JSON.
Альтернативный, длительный способ сделать это: for loop
по результатам:
foreach ($things as $k => &$v) {
$v = $v['Thing']
}
После этого ваши $things удалят дополнительный уровень ключей.
Ответ 2
Для более поздних версий Cake используйте $things = Set:: extract ($ things, '{n}.Thing');