ユニットテストを実施中に気づいた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さんもブログ追記してた!