一个 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,我想这是一个小小的牺牲。