我一直在为很多模特使用反缓存。我有一个问题,我不知道该怎么做。
我有一个User模型和一个Activity模型。 Activity有一个名为type的列,可以是诸如run,walk等等。
我知道我可以轻松地在users表中为activity_count创建一个计数器缓存。但是我希望有一些计数器列,比如run_count,walk_count,它可以计算type =“run”的活动,或者类型=“walk”等,但仍然具有自动更新计数的所有好处。
有一种简单的方法吗?谢谢!
答案 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中添加该逻辑。