CakePHP の findBy で簡単な複数条件指定
最近は CakePHP に触れる事が多くなってきています。
さて、CakePHP で DB からデータを取ってくる関数である「findBy」と「findAllBy」。
例えば、
// $name をキーにデータ取得
$this->User->findAllByName($name);
などと書けば、名前をキーにしてユーザのデータを取得できたりします。
ここで、複数の項目をキーにデータを取得したい時は、
このような書き方で取得する事ができます。
// $name と $status をキーにデータ取得
$this->User->findAllByNameAndStatus($name, $status);
さらに、OR で条件指定したい場合。
// $name と $status のどちらかをキーにデータ取得
$this->User->findAllByNameOrStatus($name, $status);
となります。とても便利ですね。
ちなみにこの関数、「And」と「Or」は混在できません。
飽くまでも、簡単な条件指定の時に使う物という認識が丁度いいと思います。
さて、ここでちょっと落とし穴。
この「FindByFooAndBar」という関数。
PHP4 で使おうとするとエラーになり、正常にデータを取得する事ができません。
PHP4でこの書き方をしたい場合は、
// $name と $status をキーにデータ取得
$this->User->findAllByName_And_Status($name, $status);
このように、「_(アンダーバー)」を間に挟むようにします。
PHP5 の環境から PHP4 の環境に移る事がある場合は覚えておくと良いですね。