2012-06-14 111 views
0

在我的CakePHP的应用程序,我有以下的模型关联:CakePHP的递归查找方法

优惠 - >订单 - >优惠券

然后,在OffersController.php,我需要写一个find方法输出 每个报价上出售的优惠券的数量,假设某些订单可以有多个优惠券。

问题是我在OffersController,所以当我尝试使用find('count')时,我只是得到要约条目的数量。我想计算优惠券条目的数量。

我试图做一些像$this->Offer->Order->Coupon->find('count'),但它不起作用。

我也尝试使用ContainableHelper,但遇到了计算错误条目的相同问题。

我该怎么办?

回答

0

您需要使用结果SQL查询来执行一些与COUNTGROUP BY有关的魔术。尝试添加一个字段像这样(未经):

$this->Offer->Order->Coupon->find(
    'all', 
    array(
     // Generate a field that counts the coupons per Order 
     'fields' => array(
      'COUNT(Coupon.id) AS coupon_count' 
     ), 
     // Only look at Orders for the given Offer 
     'conditions' => array(
      'Order.offer_id' => $id 
     ), 
     // This is important: group by Order. 
     'group' => ('Coupon.order_id') 
    ) 
); 

如果您的订单 - >优惠券有一个简单的hasMany关系,更方便的方法是使用跟踪现有的优惠券计数在每一个订单记录额外的coupon_count字段和counterCache function. CakePHP可以为你自动更新该计数器字段。

+0

谢谢,它帮了我很多。我只是做了一点不同,使用find('count')而不是find('all)。 –