O CakePHP 3.0 tem uma ótima biblioteca Collections
:
As classes de coleção fornecem um conjunto de ferramentas para manipular matrizes ou objetos Traversable. Se você já usou o underscore.js, você tem uma ideia do que pode esperar das classes de coleção.
Instâncias de coleção são imutáveis, modificar uma coleção irá gerar uma nova coleção. Isso torna o trabalho com objetos de coleção mais previsível, pois as operações não têm efeitos colaterais.
Você pode usá-lo para trabalhar com resultados de pesquisa. Vamos dar um exemplo – queremos editar tags de nota. Colocaremos as tags como uma string, separadas por vírgulas.
// App/Controller/NotesController.php
...
$data = $this->Notes->get($id, [
'contain' => ['Tags']
]);
$this->set('tag_list', implode(", ",
(new Collection($data->tags))->extract('name')->toArray()));
Veja, estamos criando uma nova coleção de tags de nota, em seguida, extrair o campo name
e converter os resultados em matriz. Que será implodido por vírgulas. Tudo isso em uma única linha.
Temos uma string, então vamos colocá-la na entrada do formulário:
// App/Template/Notes/edit.ctp
...
<?= $this->Form->input('tag_list', ['value' => $tag_list]);?>