SSブログ
Lancers.jp

CakePHP その6 - findBy* について - [CakePHP]

findBy*は基本的に、一つのフィールドしか指定できないから不便だなぁと思っていたところ、次のような記事を見つけた
ZoroMemory「cakePHPのfindBy*で複数の条件が設定可能」
http://ido.nu/kuma/2007/05/17/cakephp-findby-can-takes-multiple-conditions/

cakePHPの 6.2.2. データを取り出す を見る限りでは findBy*では * で指定したカラムに関する条件しか設定できませんが、ソースを見ると cake/libs/model/datasources/dbo_source.php に _or_ と _and_ でさらに条件を追加できることがわかります。

これは便利!さあ、早速やってみた。

$this->User->findByIdAndEmail($id, $email);

が、結果はエラーがかえってくる。
SQL文を確認すると

Query: SELECT `User`.`****` ~(略)~ WHERE `User`.`idandemail` = 1 LIMIT 1 

となっているでは!つまり、Andを全く認識してくれてないってことか。
うう〜、これは1.2系しか使えないテクニックなのか?
(ちなみに使用しているのは 1.1.15.5144 )
でも、dbo_source.phpのソース見ると、ZoroMemory氏の書いてある通りなんだけどー。
PHP4の所為なのかー。

と、ほぼ諦めていたところ、別件の問題の解決を探していたところ、下記の記事を発見。
CakePHP guide「Model::findBy{フィールド名}() の落とし穴」
http://www.blueocean.bz/blog/cakephp/archives/category/cakephp_tips/

うっひょ〜!これぞ以前に俺が探し求めていたものじゃん?
つまり、PHP4では findBy* の複数指定をこの原則に当てはめればいいんじゃん。

$this->User->findById_And_Email($id, $email);


ナイス!これで大正解。すげーぜ。

これなら、インジェクションも怖くないね!




nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。