CakePHP:计数器缓存,但有一个小的转折

CakePHP:计数器缓存,但有一个小的转折,php,cakephp,Php,Cakephp,我的很多模型都使用了计数器缓存。有一个问题我不知道该怎么办 我有一个用户模型和一个活动模型。活动有一个名为type的列,可以是、run、walk等 我知道我可以轻松地为users表中的activity_count创建计数器缓存。但我希望有一些计数器列,如run\u count、walk\u count,它们可以使用type=“run”或type=“walk”等对活动进行计数,但仍然具有自动更新计数的所有好处 有没有一个简单的方法可以做到这一点?谢谢 没有。您可以对type=“run”或type=

我的很多模型都使用了计数器缓存。有一个问题我不知道该怎么办

我有一个用户模型和一个活动模型。活动有一个名为type的列,可以是、run、walk等

我知道我可以轻松地为users表中的activity_count创建计数器缓存。但我希望有一些计数器列,如run\u count、walk\u count,它们可以使用type=“run”或type=“walk”等对活动进行计数,但仍然具有自动更新计数的所有好处


有没有一个简单的方法可以做到这一点?谢谢

没有。您可以对type=“run”或type=“walk”进行计数,也可以只进行普通计数,但只能对其中一个进行计数。另一方面,要更新的代码也不错。您还可以在afterSave中添加该逻辑。

您可以使用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字段。countercache的fieldsnaming现在应该类似于user\u run\u count或userrun\u count(我不知道这方面的约定)

另外,是否有方法更改使用的默认计数器列?如果我有一个“activities”表,并对walk进行筛选,那么我可以在“users”中使用计数器缓存更新walk\u count,而不是强制使用“activity\u count”吗?恐怕不行。您可以查看cake core以了解counterCache是如何实现的,并在应用程序中复制它。@pll您可以使用
“counterCache”=>“field”
更改counterCache字段,而不只是将其设置为true。