CakePHP:反缓存,但有一点点扭曲

时间:2011-08-16 20:31:09

标签: php cakephp

我一直在为很多模特使用反缓存。我有一个问题,我不知道该怎么做。

我有一个User模型和一个Activity模型。 Activity有一个名为type的列,可以是诸如run,walk等等。

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

有一种简单的方法吗?谢谢!

2 个答案:

答案 0 :(得分: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')

                       ),
        );

之后,Cake将查找每个关联模型的Count字段。 counterChache的字段现在应该是user_run_count或userrun_count(我不知道这个的约定)

答案 1 :(得分:0)

没了。您可以计算type =“run”,或type =“walk”,或只计算正常计数,但只能计算其中一个。另一方面,更新的代码也不错。您也可以在afterSave中添加该逻辑。