2011-08-16 24 views
0

我一直在使用计数器缓存来处理很多模型。我有一个问题,我不知道该怎么做。CakePHP:计数器缓存,但有一个小小的扭曲

我有一个用户模型和一个活动模型。活动有一个名为类型的列,可以是类似的东西,跑步,走路等。

我知道我可以轻松地为users表中的activity_count创建一个计数器缓存。但是我希望有像run_count,walk_count这样的计数器列来计算type =“run”或type =“walk”等活动,但仍然具有自动更新计数的所有好处。

有没有简单的方法来做到这一点?谢谢!

回答

0

nope。你可以计算type =“run”,或者type =“walk”,或者只是普通计数,但只能计算其中的一个。另一方面,更新代码并不算太坏。您也可以在afterSave中添加该逻辑。

+0

好吧我怎么会只计算一种类型? – pll

+0

counterScope:http://book.cakephp.org/view/1033/counterCache-Cache-your-count –

+0

另外,有没有办法改变默认的counter列的用法?如果我有一个“活动”表,我筛选散步,我可以在“用户”计数器缓存更新walk_count,而不是被迫使用“activity_count”? – pll

1

您可以使用COunterCache来做到这一点......唯一的是,您应该为每个活动定义单独的belongsTo关系。首先我要说,这不是在实践中解决这个问题的最好笏,而是因为你问:

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') 

         ), 
     ); 

之后,蛋糕将寻找计数字段每个相关模型。 counterChache的fieldsnaming现在应该是像user_run_count或userrun_count(我不知道这个约定)