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');