猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

未分類

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

-未分類
-,

執筆者:

関連記事

CakePHPのVaridationのalphaNumeric(半角英数字)は正常に機能しない

alphaNumeric(半角英数字)だけは何故か機能せずにパスしてしまいました。 カスタムチェックにするのが一番手っ取り早いようです。 応用すればオリジナルVaridationが簡単に作成できます。 …

CakePHPで定数を定義する

定数の定義には Configの下にconst.php を作成するのが一番良いかと思われます。 そのために、 Config/bootstrap.php に require_once(‘con …

CakePHP 連想配列(POSTデータ)にデータを追加する。

$this->request->dataにデータを追加するにはどうすればいいのか悩みましたが以下の方法でできました。 CakePHPというよりPHPの話ですね・・・ $this->r …

CakePHPからphpスクリプトをバックグラウンドで起動する

時間のかかる処理がある場合、 phpスクリプトをキックするだけで画面ではレスポンスを返したい場合があります。 app/Console/Command/text.php に実行したいphpスクリプトを置 …

CakePHPのインストール時によくあるエラー

INDEX1 タイムゾーンの設定2 tmpの書き込み権限3 セキュリティ4 Mod_ReWrite5 databaseファイル名6 Debug_kidのインストール タイムゾーンの設定 Warning …