CakePHP: Counter caches, but with a small twist
I've been using counter caches for a lot of my models. One question I have that I am not sure how to do.
I have a User model, and an Activity model. Activity has a column called type that can be things like, run, walk, etc.
I know I can easily create a counter cache for activity_count in the users table. But I want to have counter columns like run_count, walk_count that count activities with type ="run", or type = "walk", etc. but with still all开发者_运维知识库 the benefits of automatic updates to the counts.
Is there an easy way to do this? Thanks!
You can do this using COunterCache... the only thing is, you should define seperate belongsTo relationships for each activity. First let me say this isn't the best wat to solve this in practice, but just because you asked:
var $belongsTo = array(
'UserWalk' => array(
'counterCache' => true,
'foreignKey' => 'user_id',
'className' => 'User',
'conditions' => array('Activity.type' => 'walk'),
'counterScope' => array('Activity.type' => 'walk')
),
'UserRun' => array(
'counterCache' => true,
'foreignKey' => 'user_id',
'className' => 'User',
'conditions' => array('Activity.type' => 'run'),
'counterScope' => array('Activity.type' => 'run')
),
);
After that Cake will look for the Count field for each associated model. The fieldsnaming for the counterChache should now be something like user_run_count or userrun_count (I do not know the convention for this)
nope. You can count type ="run", or type = "walk", or just normal count, but only one of them. On the other hand, the code to update that isn't too bad. You can also add that logic in afterSave.
精彩评论