0

私の CakePHP アプリでは、次のモデルの関連付けがあります。

オファー -> 注文 -> クーポン

次に、 でOffersController.php、いくつかの注文が複数のクーポンを持つ可能性があると仮定して、各オファーで販売されたクーポンの数を出力する find メソッドを記述する必要があります。

問題は、私が にいることOffersControllerですfind('count'). クーポンのエントリー数をカウントしたい。

のようなことをしようとしましたが、うまくいき$this->Offer->Order->Coupon->find('count')ません。

ContainableHelper も使用しようとしましたが、間違ったエントリをカウントするという同じ問題が発生しました。

どうすれば続行できますか?

4

1 に答える 1

0

COUNTと で何らかの魔法を行うには、結果の SQL クエリが必要ですGROUP 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')
     )
);

coupon_countOrder -> Coupon に単純な hasMany 関係がある場合、より便利な方法は、追加のフィールドとcounterCache 関数を使用して、すべての Order レコードの既存の Coupon カウントを追跡することです。CakePHP は、そのカウンター フィールドを自動的に更新できます。

于 2012-06-14T10:14:10.687 に答える