Edited at

CakePHP2 findについて

More than 3 years have passed since last update.

CakePHP2のfindメソッドの解説になります。


findとは

CakePHPフレームワークで使用できるDBの検索、取得を行うメソッドです。

SQLを書かずに簡単にデータの取得が出来ます。


サンプルコード

find(

'all',
[
'conditions' => ['Model.field' => $thisValue], //検索条件の配列
'recursive' => 1, //int
'fields' => ['Model.field1', 'DISTINCT Model.field2'], //フィールド名の配列
'order' => ['Model.created', 'Model.field3 DESC'], //並び順を文字列または配列で指定
'group' => ['Model.field'], //GROUP BYのフィールド
'limit' => n, //int
'page' => n, //int
'offset' => n, //int
'callbacks' => true //falseの他に'before'、'after'を指定できます
]);


解説

find([string], [array]);


第1引数:(string)



  • all


    • 配列を返す




  • first


    • 一行のみ返す




  • list


    • インデックス付きの配列を返す→formのセレクトに使うと便利




  • count


    • 整数を返す




  • neighbors


    • 前後の行を返す




  • threaded


    • 入れ子になった配列を返します




第2引数:(array)


  • conditions:(array)検索条件

    ['Model.id' => '1'],//idが1

    ['Model.id >' => '1'],//idが1より大きい

     


  • recursive:(int)取得範囲の設定

    -1 Group のデータだけを取得します。join しません。(最速

    0 Group のデータとそのドメインを取得します。

    1 1つの Group とそのドメインとそれに関連した User を取得します。(defalt

    2 1つの Group とそのドメインとそれに関連した User と各 User に関連した Article を取得します。

     


  • fields:(array)取得する列選択

    fieldsを指定しないと全てのフィールドが取得される

    DISTINCT:重複した行をまとめる

     


  • order:(array)並び順

    DESC:降順

    ASC :昇順

     


  • group:(array) =GROUP BY@SQL

    指定したカラム名の値が同じものが同じグループとなります。

    複数のカラムを指定した場合は、値の組み合わせが同じものでグループ化されます。

     


  • limit:(int)取得数制限

     


  • page:(int)取得するページ番号(limitと併用

     


  • offset:(int)データの取得開始位置を指定

     


  • callbacks:(int)コールバックを実行するか

    save前後、varidate前後等設定可能



参考

cake公式

http://book.cakephp.org/2.0/ja/models/model-attributes.html

callbacks について

http://book.cakephp.org/2.0/ja/models/callback-methods.html

CakePHP2 findまとめ

http://cakephp.popotoo.com/db/221/

GroupBy

http://www.dbonline.jp/sqlite/select/index14.html

ちなみに

CakePHP3だとこんな感じ

http://qiita.com/kozo/items/87dc9f725e71dd742468