CakePHP1.2のcounterCache

1.1にもあったのかもしれないけど、1.2はModelにcounterCacheって便利な機能がある。

modelがアソシエーションしてるときに、model名_countってカラムを用意しといて、

bindModelのときに’counterCache’ => trueを指定しとくと、勝手に数を数えて増減を登録してくれらしい。

詳しい説明はここにある。

使ってみたけど、たしかに便利。

でもこれを使ってると、bindModel($params, $reset = true)の$reset=falseが効かなくなるのね。

なので、うまくつかわないと$this->paginateが使えなくなっちゃうね。
※この記事参照

僕の書き方が悪かったんだけど、いきなり動かなくなるからあせった。

ソース読んでないからなんともいえないけど、両立する方法もあるのかな。

※追記
使いたいときだけ下記のようにmodel内でbindModelしてつかってた。

で、save()の時はうまく動いてたんだけど、del()の時はうまく動かなかった。

modelのソースを見たら、下記のようにカウンターキャッシュのメソッド(updateCounterCache())を読んでた。

del()の時は、delete分の前にselectを読んでるので、その時点でbindModelの情報がなくなってたみたい。
$this->belongsToが空になってた。
なので、

としたら、うまくカウンターキャッシュが動いてくれた。

ほんとかどうか自信がないや。
使い方が間違ってるのかもしれない。

このページのトップに戻る
投稿日:2008/9/11  投稿者:zuya  コメント(0)

PHPでXML宣言をすると画面が崩れた

HTMLコーディングしてて、ファイルをPHPにしてプレビューしたら、エラーが出たよ。

調べてみたら、どうやら一行目のXML宣言がまずかったみたい。

こいつの?の部分をPHPが認識してしまって、エラーが起きるみたいだ。

なので、echoで呼ぶようにしたら問題無く表示されました。

やはりデザイナーがPHPをいじると、しょうもない所でつまづくなぁ。

このページのトップに戻る
投稿日:2008/9/8  投稿者:go  コメント(2)

PHPでサイトのルートパスを取得する方法

外部ファイルをincludeしたい場合に、絶対パスではなくて、サイトルートからのパスで取得したい場面に出くわしました。調べたら、PHPにはサイトのルートを返してくれる便利なものがあるんですね。

こいつで一発でした。

覚えておこうっと。

このページのトップに戻る
投稿日:  投稿者:go  コメント(0)