2009-08-29 7 views
2

ブログの特定の投稿のコメント数を表示します。私は私のデータベースに「投稿」と「コメント」テーブルを持っています。今、私はcounterCacheの使い方についてちょっと混乱しています。 私は最初に 'posts databases'、すなわち 'comment_count'にフィールドを作成してから、ポストモデルにcounterCacheキーを追加しました。cakeCacheのcounterCache

var $hasMany = array('Comment'=>array('counterCache'=>true)); 

しかし、これは機能しませんでした。私はまた、他の方法、すなわちcoomentsテーブルにフィールドを作成し、counterCacheキーをモデルに追加することによって、丸めようとしました。しかし、これも機能していませんでした。 ここでは何が欠けていますか?find( 'count')を使用してコメントの数を表示できますか?またはこれを達成する他の方法がありますか?

+0

今日、私がdeleteAll()を実行しようとすると、CounterCacheはカウントを更新しませんでした。そして私はそれらを友人にする方法を見つけました。 http://www.karlrixon.co。 埋め込みメソッド$ this-> User-> updateCounterCache(array( 'group_id' => 3));を使用できます。 –

答えて

4

正しくcounterCacheを使用していますか? counterCacheとあなた自身の解決策は多少無関係です。

3.7.4.1.1 counterCache - Cache your count()

この機能を使用すると、関連するデータの数をキャッシュできます。 find( 'count')を使用してレコードを手動で数える代わりに、モデル自体は関連する$ hasManyモデルへの追加/削除を追跡し、親モデルテーブル内の専用整数フィールドを増減します。

...今から

class Image extends AppModel { 
    var $belongsTo = array(
     'ImageAlbum' => array('counterCache' => true) 
    ); 
} 

、あなたがImageAlbumに関連するイメージを追加または削除するたびに、ImageAlbum.image_count内の番号が自動的に調整されています。言い換えれば

手動$this->Model->find('count')する必要はありませんとエントリを追加または削除するとき、それが唯一変更しますので、それが設計されています。あなたの場合は、投稿モデルにcomment_countフィールドを追加する必要がありますが、コメントモデルでbelongsTo => Post, counterCache => trueと指定してください。理由は、のコメントモデルが変更(追加/削除)されるたびに、投稿モデルのcounterCacheを更新する必要があるからです。

希望に役立ちます。

+0

実際、私は疲れた後にcounterCacheを使用するという考えを落としました。 find( 'count')は私にとって完璧に機能します。しかし、あなたの答えに感謝します。 counterCacheの使用に関する私の混乱を解消しました:) –

+2

counterCacheを遡及的に生成することは可能ですか? –

+0

@IanMcIntyreSilber、はい、それはあなたのためです – MSR

-6

男の子、私はそれを理解しました。 postsコントローラのviewアクションに次のコードを記述して設定し、ビューファイルにエコーします。完全に動作します

$counts = $this->Post->Comment 
>find('count',array('conditions'=>array('Comment.post_id'=>$post['Post']['id']))); 
0

正しい方法でcounterCacheを使用しています。しかし、/ app/tmp/cache/

のファイルをすべてクリアするようにしてください。
0

$hasManyの関係ではcounterCacheは使用できないと思いますが、$belongsToのみです。

0

既存のデータに対してCounterCacheを初期化する方法はありますか?私はそれを使用するために私のコードをリファクタリングし、実際にレコードを挿入すればデータを更新しますが、それまでは0で他の機能を破壊します。 私は仕事をするためのスクリプトを書くことを考えましたが、トリックがあるかもしれないと思いましたか?

関連する問題