一个 counterCache 递增,一个不递增 - 尽管两者的代码相同
One counterCache incrementing, one not - despite identical code for both
我正在开发一个基本的论坛系统,并在其中使用了三个计数器缓存。
两个用于类别(线程容器),有一个 reply_count
和一个 thread_count
,最后一个用于 post 本身,它有一个 reply_count
.
一个话题由多个ForumPost
组成,其中一个是话题(is_thread
= true
),其余的是回复(is_thread
= false
).
我的 ForumPost
代码的一部分如下所示:
public $belongsTo = array(
'ForumCategory' => array(
'counterCache' => array(
'thread_count' => array('ForumPost.is_thread' => 1),
'reply_count' => array('ForumPost.is_thread' => 0)
// The line above is the one not working
)
),
'Thread' => array(
'className' => 'ForumPost',
'foreignKey' => 'forum_post_id',
'conditions' => array(
'ForumPost.is_thread' => 0
),
'counterCache' => array(
'reply_count' => array('ForumPost.is_thread' => 0)
)
),
);
public $hasMany = array(
'Reply' => array(
'className' => 'ForumPost',
'foreignKey' => 'forum_post_id'
)
);
虽然这在大多数情况下都有效,但我注意到一个奇怪的行为:线程会增加类别的线程数,但回复不会增加类别的回复数,尽管它们会增加线程的回复数。
我仍然习惯 CakePHP 处理此类事情的方式,所以我可能错过了一些明显的东西,但我已经思考了一段时间 - 任何帮助将不胜感激!
编辑
正在执行以下语句:
UPDATE ... SET `ForumCategory`.`reply_count` = 8 WHERE `ForumCategory`.`id` = 0
刚刚意识到这是因为我没有为回复设置 forum_category_id
以避免冗余,但 CakePHP 使用该值进行插入。
我不得不开始在所有回复上设置 forum_category_id
,我想这是一个小小的牺牲。
我正在开发一个基本的论坛系统,并在其中使用了三个计数器缓存。
两个用于类别(线程容器),有一个 reply_count
和一个 thread_count
,最后一个用于 post 本身,它有一个 reply_count
.
一个话题由多个ForumPost
组成,其中一个是话题(is_thread
= true
),其余的是回复(is_thread
= false
).
我的 ForumPost
代码的一部分如下所示:
public $belongsTo = array(
'ForumCategory' => array(
'counterCache' => array(
'thread_count' => array('ForumPost.is_thread' => 1),
'reply_count' => array('ForumPost.is_thread' => 0)
// The line above is the one not working
)
),
'Thread' => array(
'className' => 'ForumPost',
'foreignKey' => 'forum_post_id',
'conditions' => array(
'ForumPost.is_thread' => 0
),
'counterCache' => array(
'reply_count' => array('ForumPost.is_thread' => 0)
)
),
);
public $hasMany = array(
'Reply' => array(
'className' => 'ForumPost',
'foreignKey' => 'forum_post_id'
)
);
虽然这在大多数情况下都有效,但我注意到一个奇怪的行为:线程会增加类别的线程数,但回复不会增加类别的回复数,尽管它们会增加线程的回复数。
我仍然习惯 CakePHP 处理此类事情的方式,所以我可能错过了一些明显的东西,但我已经思考了一段时间 - 任何帮助将不胜感激!
编辑
正在执行以下语句:
UPDATE ... SET `ForumCategory`.`reply_count` = 8 WHERE `ForumCategory`.`id` = 0
刚刚意识到这是因为我没有为回复设置 forum_category_id
以避免冗余,但 CakePHP 使用该值进行插入。
我不得不开始在所有回复上设置 forum_category_id
,我想这是一个小小的牺牲。