未分類

CakePHP findでMySQL関数を使用したい

投稿日:

たとえば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'=>'企業コード'));
        ?>

このサンプルでは(企業コード:企業名称)という値をコンボボックスに設定しています。

Gooleアドセンス用336

Gooleアドセンス用336

-未分類
-,

執筆者:

関連記事

PHP execで別exeが実行できない

他のサイトでも色々紹介されていますので、あまり紹介されていないパターンのご紹介です。 どうしても実行できないときは、まずexecを呼び出しているときのカレントワーキングディレクトリを確認してください。 …

asp

IISの設定

Visual StudioでLocalに配置したサイトが、ブラウザで表示できず、下記エラーが表示された場合の対処法です。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ …

PHPでCSVの読み込みにマルチバイトを使用する

csvを読み込もうとするとどうしてもマルチバイトが文字化けしてしまいました。 array( (int) 0 => ‘XXXXXXXXX’, (int) 1 => ‘eストメッセージ htt …

CakePHPの初期画面を変更する

/Config/routes.phpを編集すればOKです。 もちろん事前に対応するページを作成しておかなくてはいけません。 まずはbakeコマンドでサンプルページを作成しておけばスムーズに開発できるで …

CakePHPのlayoutを指定する

ログイン画面ではメニューが不要であったりと、 レイアウトを変更したい場合はコントローラーのアクションで以下のように指定します。 View/Layout/配下に作成したレイアウトを指定すればよいのですが …