CakePHPでデータを取得する(find)

テーマ:
CakePHPでは手軽にデータを取得することが出来ます。
しかし、通常のSQLの書き方とは違い慣れるまでは戸惑うかもしれません。

検索条件やフィールドなどを記述する場合にもSQLではwhere句の後に記述していたと思いますが、
CakePHPでは配列で定義します。

$option = array(
    'conditions' => array(flg' => 1), 
    'recursive' => 1,
    'fields' => array('Model.field1', 'DISTINCT Model.field2'),
    'order' => array('Model.created', 'Model.field3 DESC'), 
    'group' => array('Model.field'), 
    'limit' => n, 
    'page' => n,
    'offset' => n,
    'callbacks' => true //falseの他に'before'、'after'を指定できます
);

conditions
カウントが1以上や性別が男性などの検索条件を指定する場合に使用します。

recursive
どのぐらい深く関連モデルのデータを取得すべきか、 を定義します。

  • -1 CakeはGroupのデータだけを取得する。joinしない。
  • 0 CakeはGroupのデータとそのドメインを取得する。
  • 1 Cake は1つのGroupとそのドメインとそれに関連したUserを取得する。
  • 2 Cake は1つのGroupとそのドメインとそれに関連したUserと各Userに関連したArticleを取得する。
【fields】
取得するフィールドを指定します。

【order】
並び替え

【group】
グループ化する

【limit】
取得数

【page】
ページを指定する

【offset】
開始位置

パラメーターの設定が終わったら、次は値を取得するための記述をします。

class Test extends AppModel {
      public function getlist(){
            $option = array(
                'conditions' => array(flg' => 1), 
                'recursive' => 1,
                'fields' => array('Model.field1', 'DISTINCT Model.field2'),
                'order' => array('Model.created', 'Model.field3 DESC'), 
                'group' => array('Model.field'), 
                'limit' => n, 
                'page' => n,
                'offset' => n
            );
            return $this->find('all',$option);
      }
}

今回はModel層から取得することを想定している為、controller層から取得する場合は記述方法が少し異なります。

今回は簡単な一般的な取得方法を掲載している為、他にも様々な取得方法があります。

詳しくはCakePHPの公式サイトを御覧ください。

http://book.cakephp.org/2.0/ja/models/retrieving-your-data.html