2012-06-14 4 views
0

찾기, 나는 다음과 같은 모델 협회가 :CakePHP의 재귀 내 CakePHP의 응용 프로그램에서 방법

제공 -> 주문 -> 쿠폰 그리고

, OffersController.php에서를, 내가 찾기 메소드를 작성해야 일부 주문에는 여러 개의 쿠폰이있을 수 있다고 가정하고 각 제안에 판매 된 쿠폰 수를 으로 출력합니다.

문제는 내가 OffersController에 있기 때문에 find('count')을 사용하려고하면 제공 항목 수가 늘어납니다. 쿠폰 수를 계산하고 싶습니다.

$this->Offer->Order->Coupon->find('count')과 같은 작업을 시도했지만 작동하지 않습니다.

나는 또한 ContainableHelper를 사용하려했지만 잘못된 항목을 세는 것과 같은 문제가 발생했습니다.

어떻게하면됩니까?

답변

0

COUNTGROUP BY으로 마법을 수행하려면 결과 SQL 쿼리가 필요합니다. 이 같은 필드를 추가 (테스트되지 않은) 시도 :

$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의 관계를 가지고, 더 편리한 방법은을 사용하여 모든 주문 레코드에서 기존 쿠폰 수를 추적하는 것입니다 extra coupon_count 필드와 counterCache function. CakePHP가 자동으로 해당 카운터 필드를 업데이트 할 수 있습니다.

+0

감사합니다. 덕분에 많은 도움이되었습니다. find ('all') 대신 find ('count')를 사용하여 약간 다른 결과를 보였습니다. –