cakephp2.2 でModel::query()のTips

· cakephp, 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さんもブログ追記してた!