Concatenando campos em um find list no CakePHP 1.3

Esses dias precisei que um select do meu formulário apresenta-se no seu valor, não apenas o valor de um único campo, no caso o ID, queria que o value dos options fica-sem assim “ID – Campo 1 – Campo 2 – Campo 3”. O problema é que cada campo estava em uma tabela diferente. E foi aí que eu conheci um novo recurso do CakePHP 1.3, os campos virtuais (virtualFields).

Primeiro, vá até o Model que você quer criar um campo virtual e adicione o atributo como no exemplo:

public $virtualFields = array(
        'ficha' => 'CONCAT("#", Form.id, "  ", Work.title, " - ", Service.title, " - ", Provider.title)'
        );

Agora no controller você já pode utilizar o find list e chamar o campo virtual que você criou, como no exemplo:

$dados = $this->SeuModel->find('list',
                array(
                'fields' => array('id', 'ficha'),
                'recursive' => 1,
                'order' => 'id'
                )
        );

Pronto, agora você tem o array $dados com uma string com o nome de ficha, que tem os valores concatenados assim: #id – titulo1 – titulo2 – titulo 3

Referência

http://book.cakephp.org/pt/view/1590/Using-virtualFields