ActiveRecordのfind系メソッドについて
次のような規約くらいでいいかなと思ってたりします。基本的にRailsのActiveRecord風味かなと(シンボル使ったりはできないので、何番目の引数がどうのこうのという規約になるんですけどね・・・)。
- メソッドはfindとfindAll
- findは基本的にidを条件とした単純なものを取得し、findAllが少しだけ条件を指定したものを取得するようにする。(けどややこしいものはqueryでなげてくれという姿勢はかえない)
- findは引数にスカラーか配列をとる
- 引数がスカラーであれば単純なid指定(id = ?)
- 引数が配列であればそれらを全て取得(id in (?, ?, ?, ・・・))
- findAllは4つの引数をとる。1つ目は条件を表す配列、2つ目はOrder Byの向けの配列、3つめはoffset、4つ目はlimit(引数を指定しなければ無条件で検索)
- findAllの1つ目の引数は2つ形式がある
1つ目は配列2つをもつ形式。1つ目の配列でフィールド名を、2つ目の配列でその値を指定する。例えば「array(array('name', 'email'), array('foo', 'foo@bar.jp'))」の形であれば1つ目はハッシュを持つ形式。例えば「array('name' => 'foo', 'email' => 'foo@bar.jp')」の形であれば、「name = 'foo' and email = 'foo@bar.jp'」のようなand条件を作る。- 2つ目は文字列と配列を持つ形式。1つ目の文字列で条件式全体を、2つ目の配列でその値を指定する。例えば「array('name = ? or email = ?', array('foo', 'foo@bar.jp'))」の形であれば、「name = 'foo' or email = 'foo@bar.jp'」のようになる。
- findAllの2つ目の引数はOrder By向けの配列で、「array('email' => ASC, 'id' => DESC)」のような形式で指定
- findAllの3つ目、4つ目の指定でoffset/limitを指定する。検索結果を部分的に取得する。
- findAllの1つ目の引数は2つ形式がある
こうした方がいいんじゃないの?とかあればツッコミよろしくです。
※追記 Order Byの指定は素直に文字列にして「'email ASC, id DESC'」にするかな。文字列ならそのまま、配列なら組み立てるってことにしといたらいいか。
※追記 findAllの1つ目の引数の1つ目の形式は素直にハッシュにした方がいいか。その方がわかりやすいな。
※追記 findFirstって別にあったほうがいいのかな。内部的にはfindAllをoffset/limit付きで呼ぶだけだけど。