cakephp2.2 でModel::query()のTips
ユニットテストを実施中に気づいたModel::query()のtips。
Model::query()でbindしたい
以下の方法で疑似bindしてくれます。
Model->query(
'select * from posts where id=? and user=?'
, array('hoge','oreore')
);
Model::query()でキャッシュしてほしくない
query()はデフォルト、結果がキャッシュされますので、キャッシュされたくない場合こうします。
Model->query(
'select * from posts'
,false
);
、、、あれ、というとこは、バインドとキャッシュoffを同時にするには、どうしたらいいんだ。。。。
bind & cache off
これでできました
Model->query(
'select * from posts where id=? and user=?'
, array('hoge','oreore')
,false
);
なんと!cacheのパラメータを第3引数に移動で対応できました!汎用的!
参考
fetchAll
@cakephper さんの記事CakePHP2 独自SQL文でPrepared Statementを使う を参考に、fetchAllで、同じような事を試してみたんですが、ダメでした。
cacheQueries
そうそう、cacheQueries = false も両方、試したんですけどねー、これもだめでした。
追記
@cakephperさんに言われて、fetchAllを再度、以下のように第3引数設定して、試してみました。
Model->getDatasource()->fetchAll(
'select * from posts where id=? and user=?'
, array('cakephper','sasugadesu')
, array('cache' => false)
);
ってしたら、いけました!てか、@cakephperさんもブログ追記してた!