CakePHP递归查找方法

时间:2012-06-14 09:45:16

标签: cakephp

在我的CakePHP应用程序中,我有以下模型关联:

  

优惠 - >订单 - >优惠券

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

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

我试图做$this->Offer->Order->Coupon->find('count')之类的事情,但它不起作用。

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

我该怎么办?

1 个答案:

答案 0 :(得分: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可以自动为您更新该计数器字段