先のエントリで書いた「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 で指定した方が無難だと思います。

関連する投稿