Cakephp 计算每个产品的订购次数

Cakephp 计算每个产品的订购次数,cakephp,cakephp-2.1,Cakephp,Cakephp 2.1,数据库中的每个订单都有一个产品id。每个订单只有一个产品 在ProductsController中,我想显示所有产品,并在每个产品旁边显示订购的次数。我需要包括一个条件,以排除任何已删除=0的产品一个简单的查找('count')就足够了(此查找操作的详细信息如下所示): 正如Mark所建议的那样,groupby也应该做到这一点,并通过使用单个查找来简化过程 $count = $this->Product->Order->find('count', array( 'con

数据库中的每个
订单
都有一个
产品id
。每个订单只有一个
产品

ProductsController
中,我想显示所有产品,并在每个产品旁边显示订购的次数。我需要包括一个条件,以排除任何已
删除=0的产品

一个简单的
查找('count')
就足够了(此查找操作的详细信息如下所示):

正如Mark所建议的那样,
groupby
也应该做到这一点,并通过使用单个查找来简化过程

$count = $this->Product->Order->find('count', array(
    'conditions' => array(
        'Order.product_id' => $product_id,
        'Product.deleted' => 0
    ),
    'group' => array('Order.product_id')
));
一个简单的
find('count')
就足够了(有关此查找操作的详细信息,请参阅):

正如Mark所建议的那样,
groupby
也应该做到这一点,并通过使用单个查找来简化过程

$count = $this->Product->Order->find('count', array(
    'conditions' => array(
        'Order.product_id' => $product_id,
        'Product.deleted' => 0
    ),
    'group' => array('Order.product_id')
));
我也会用

将订单数量字段添加到产品表中,并修改订单模型

class Order extends AppModel {
    public $belongsTo = array(
        'Product' => array(
            'counterCache' => true,
            'counterScope' => array('Product.deleted' => 0)
        )
    );
}
我也会用

将订单数量字段添加到产品表中,并修改订单模型

class Order extends AppModel {
    public $belongsTo = array(
        'Product' => array(
            'counterCache' => true,
            'counterScope' => array('Product.deleted' => 0)
        )
    );
}

此查询应返回所需的结果。根据需要调整条件、附加字段等

$data = $this->Order->find('all',array( 
   'fields'=>array(
       'COUNT(Product.id)as Count',
       'Product.id','Product.name'
   ), 
   'group'=>array(
       'Product.id'
   ), 
   'contain'=>'Product' 
));

此查询应返回所需的结果。根据需要调整条件、附加字段等

$data = $this->Order->find('all',array( 
   'fields'=>array(
       'COUNT(Product.id)as Count',
       'Product.id','Product.name'
   ), 
   'group'=>array(
       'Product.id'
   ), 
   'contain'=>'Product' 
));

我想知道“groupbyproduct.id”是否可以在一个query@mark说得好,我认为你是对的。我更新了答案以显示该方法。更新后的答案仍然会让您对每个产品进行单独的查询,这可能会快速增加。尝试:$data=$this->Order->find('all',array('fields'=>array('COUNT(Product.id)as COUNT','Product.id','Product.name'),'group'=>array('Product.id'),'contain'=>Product');此外,在这里使用虚拟字段应该是一个结构良好的查找结果。我真的希望在一个查询中完成它,否则效率会非常低。Oldskool,你的第二种方法不幸无效。我只算了一次。我想知道“groupbyproduct.id”能否在一次计算中实现这一点query@mark说得好,我认为你是对的。我更新了答案以显示该方法。更新后的答案仍然会让您对每个产品进行单独的查询,这可能会快速增加。尝试:$data=$this->Order->find('all',array('fields'=>array('COUNT(Product.id)as COUNT','Product.id','Product.name'),'group'=>array('Product.id'),'contain'=>Product');此外,在这里使用虚拟字段应该是一个结构良好的查找结果。我真的希望在一个查询中完成它,否则效率会非常低。Oldskool,你的第二种方法不幸无效。我只得到了一个计数。+1尽管由于一些非标准用法,我不能在我的场景中使用它。+1尽管由于一些非标准用法,我不能在我的场景中使用它。