読者です 読者をやめる 読者になる 読者になる

CakePHP - counterCacheについて

CakePHP

ドキュメントに乗ってることだけど書くと覚えるんだよたぶん

例えば俺がゲーム何本持ってるかっていうのを数えるのに、counterCacheを使わないといちいち数えなければいけないけどcounterCacheを使うと現在の本数はちゃんと把握していて、新たに購入すると本数に+1して、売却すると本数に-1する。常に現在の本数は数値として持っていくこと(イメージだから細かいこと気にすんなよ。


書くときはbelongsToでcounterCacheをtrueにするってのと、親にmodel_name_countってカラムを作るだけ。終了
俺の情報はUserに持っていてUserは多のGameを持つ。1対多ってやつ。

<?php
class Game extends AppModel {
    public $belongsTo = array(
        'User' => array('counterCache' => true)
    );
}

User.game_countってカラムの値がゲームの本数になるわけね。


いやいや実はさ、持ってる本数を把握したいんじゃなくて未プレイの積みゲーの数だけを常に把握したいわけよ。って時には条件指定することもできる。
statusみたいな値持ってて0だと未プレイ。1だとプレイ中。2だとクリア済み。みたいな感じで0の本数が知りたいんですね。
カラム名の制約上あんまり条件たくさんつけた件数を持つのは微妙なきもするけどねえ。

<?php
class Game extends AppModel {
    public $belongsTo = array(
        'User' => array(
            'counterCache' => true,
            'counterScope' => array('Game.status' => 0)
    ));
}

なるほど