AkActiveRecord::find
AkelosのActiveRecordのメモ.
find()
基本のfind.
第一パラメータに"first","all"などの取得条件を指定.第二パラメータには配列でオプションを指定する.オプションは以下の通り.
- conditions
- limit
- SQLのLIMIT区.何件分のデータを取得するかを指定.
- offset
- SQLのOFFSET区.取得するデータがどこから始まるかを指定
- order
- SQLのORDER区."id desc"みたいな.
- include
- アソシエーションを自動読み込み(後述)
ちなみに"find()"では単純にidを一つでも,複数並べた形でもデータの取得ができる.
$Model->find(1, 2, 3);
結果が複数ある場合には,モデルの配列で結果が返ってくる."first"を指定した場合には一番最初の結果のモデルが返ってくる.
findの"include"オプション
基本的にはアソシエーションを指定したモデルの名前を書く.例えばUserモデルとGroupモデルが繋がっている場合.Userは一つのGroupに属する,逆にグループには複数のUserが属するってなときは,
Userモデル
$belongs_to = 'group';
Groupモデル
$has_many = 'users';
な感じで結びつく.
このとき,とあるグループを取得するときについでに社員一覧とかを取るとすると
$group = $this->Group->find('first', array( 'conditions' => array('id = ?', 1), 'include' => 'users' ))
といった形で書ける.通常ならアソシエーションを読み込むときには"load"で読む必要があるけど,includeオプションをつけることで自動的に取ってきてくれる.
findAll()
"find('all')"のラッパー.内部的にもパラメータの一番最初に"all"指定を付け加えて,"find()"メソッドを実行.
findFirst()
"find('first')"のラッパー.内部的にもパラメータの一番最初に"first"指定を付け加えて,"find()"メソッドを実行.
findBy()
find()のconditionsオプションをいろいろ柔軟に指定できるよ.ってな感じっぽい.
コード中の例によると下記みたいな指定ができる.
findBy('username AND password', $username, $password);
findBy('age > ? AND name:contains', 18, 'Joe');
findBy('is_active = true AND session_id', session_id());
最初の引数に"all"か"first"をつける.付けない場合にはデフォルトで"all"が指定される.
これにfind()の時みたいにオプションを指定した場合には,引数の最後に配列で指定してあげる.
findAllBy(args)
findBy('all', args);
findBy
findFirstBy()
findBy('first', args);
findLastBy()
findFirstBy()の逆で最後のデータを取得.内部的に"findFirstBy()"を実行する前にorderに"desc"を指定している.