cakephp 2.2树行为-递归计算给定类别中的产品和所有子项

cakephp 2.2树行为-递归计算给定类别中的产品和所有子项,cakephp,Cakephp,CakePHP 2.2 我已经使用树行为为我的类别构建了一个嵌套的垂直菜单。在这些类别中有一些产品。我想实现的是,在类别名称旁边,包含指定类别中的产品编号。以下是一个例子: Automobile (100) > SUV (35) > Pickup (25) > Berline (40) 在类别旁边,我们可以看到其中的产品数量 我在线查看并找到了本教程: “查找数据”最后一部分中有一行说明了如何实现这一点:

CakePHP 2.2

我已经使用树行为为我的类别构建了一个嵌套的垂直菜单。在这些类别中有一些产品。我想实现的是,在类别名称旁边,包含指定类别中的产品编号。以下是一个例子:

Automobile (100) > SUV (35)
                 > Pickup (25)
                 > Berline (40)
在类别旁边,我们可以看到其中的产品数量

我在线查看并找到了本教程: “查找数据”最后一部分中有一行说明了如何实现这一点:

 // count the posts in the given category and all subchildren recursively
        $id = 123;
        $postCount = $this->Category->postCount($id); 
        debug($postCount); 
这段代码中的问题是它使用了postCount(),但在我的例子中,我的类别没有post,而是products,换句话说,我使用了一个产品模型和一个ProductsController,所以它无法工作。我能做到吗

[编辑]

我找到了解决办法。首先,我在categories表中创建了一个新字段,并将其命名为product_count(关联表的单数名称)。然后我在ProductsController.php中添加了一个belongsTo。具体如下:

public $belongsTo = array(
        'Category' => array(
            'counterCache' => true
            )
        );
最后,在我的垂直菜单的foreach中,我只是在类别名称旁边添加了以下内容:

$v['Category']['product_count']

现在它开始工作了

将后计数功能替换为:

function productCount($id, $direct=false){
    if (!$direct) {
        $ids = array($id);
        $children = $this->children($id);
        foreach ($children as $child) {
            $ids[] = $child['Category']['id'];
        }
        $id = $ids;
    }
    $this->Product->recursive = -1;
    return $this->Product->findCount(array('category_id'=>$id));
}

那为什么不相应地“重命名”它呢?谢谢马克,我不明白你的意思。你能说得更具体一点吗?嗨,马特,谢谢你的关注。我试图加入你的代码,但作为一个初学者,我无法让它工作。我回答了自己的问题,展示了我的一些代码,看看如何使用您的代码。再次感谢