2007年
11月 10
先のエントリで書いた「CakePHP findBy で複数条件の指定で OR も指定可能」ですが、findByHogeAndFoo などの処理がどうなっているか気になったので調べたときのメモです。
- findByHogeAndFoo メソッドが実行されると model_php5.php ( Model クラス ) の __call メソッドが実行される
- __call メソッドでは DboSource クラスの query メソッドに findByHogeAndFoo のメソッド名と条件の値を渡す
- DboSource クラスの query メソッドでは、findBy または、findAllBy の後ろの文字列を取り出す
- 取り出した文字列を小文字に変換してさらに AND を _and_、OR を _or_ に変換する
- _or_ または _and_ で分割してフィールドを取り出す
- AND または OR にしたがって SQL の条件を組み立てる
というようなこと処理がされていました。
まとめると
- 複数指定はいくつでも可能
- AND または OR は混在して指定はできない
いくつでも指定はできるようですが、たくさんの条件をこれで指定するとソースの可読性が下がりそうですし、AND と OR が混在できないので普通はそんな指定はしないでしょう。
指定する場合は2つくらいにとどめておいて、それより多くなる場合は find の $conditions で指定した方が無難だと思います。
関連する投稿
2 Responses to “CakePHP findBy での複数指定を調べたメモ”
Leave a Reply
Additional comments powered by BackType



7月 17th, 2010 at 2:14 am
[...] CakePHP findBy での複数指定を調べたメモ | Sun Limited Mt. : http://www.syuhari.jp/blog/archives/135 [...]
7月 18th, 2010 at 6:16 pm
[...] CakePHP findBy での複数指定を調べたメモ | Sun Limited Mt. : http://www.syuhari.jp/blog/archives/135 [...]