たとえばMySQLのconcatを使用して文字列を結合したいとします。
$data = $this->Company->find('list',
array(
'fields'=>array('id','concat(comp_code,comp_name)'),
'order'=>array('comp_code')
)
);
とするとSQLは以下のようにテーブル名がついてしまいます。
SQL Query: SELECT `Company`.`id`, Company.concat(comp_code,comp_name) FROM `kddi`.`companies` AS `Company` WHERE 1 = 1 ORDER BY `comp_code` ASC
結論をいいますと、MySQL関数を利用するにはVirtualFieldsを使用する必要がります。
findの実行前にVirtualFieldsを設定して使用します。
Controllerでは以下のようにします。
$this->loadModel('Company');
$this->Company->virtualFields['name']='concat(Company.comp_code," : ",Company.comp_name)';
$data = $this->Company->find('list',
array(
'fields'=>array('id','name'),
'order'=>array('comp_code')
)
);
$this->set('compcodes',$data);
そしてView側では以下のように値を読み込みます。
Form->input('comp_code',array('type'=>'select','options'=>array($compcodes)));
echo $this->Form->input('comp_code',array('label'=>'企業コード'));
?>
このサンプルでは(企業コード:企業名称)という値をコンボボックスに設定しています。

