2012-03-04 41 views
0
Project hasMany Comments 
Payment (id, project_id, value, date) 

私は、プロジェクトごとの支払いの総額に等しい列をインデックスビューに含めたいと考えています。私はこのフィールドで並べ替えることができるようにしたい。CakePHP 2.0ページネーションとサムの関連付け関連するモデル

私はここでいくつかの類似した問題を発見しましたが、どちらもページネーションに関係していません。

私の現在の(間違った)ソリューション:

$this->paginate = array('Project' => array(
      'conditions' => array('Project.archived =' => $archive), 
      'order' => 'Project.start_date DESC', 
      'contain' => array(
        'Payment' => array(
          'fields' => array('SUM(Payment.value) as Project__value_sum'), 
          'group' => array('Payment.project_id'), 
          ) 
         ) 
     )); 
    $data = $this->paginate('Project'); 
    $this->set('projects', $data); 
    $this->set('archive', $archive); 

答えて

0

あなたはおそらくPaymentモデルにafterSaveをやりたいように思えるでしょう。

afterSave関数内では、関連プロジェクトの支払い(MySQL SUM()を使用)を合計するいくつかのMySQLを実行し、Project.payment_totalに格納します。

その後、あなたは簡単に並べ替えることができ、そのフィールドによって、必要なときに(新規または変更された支払いがあるときすなわち)それだけで動作しますので、それは、すべてのページに複雑なMySQLを実行することからあなたを保つ

+0

私は」前に気付いたことがありますが、私は支払いの合計ではなく、支払いの合計を保持したいと思います。 – milosz

+0

@milosz - あなたの質問を読んでいないことを理解した後、私の答えを編集しました。 – Dave

+0

ありがとうございます、それはうまくいくようです。しかし、私は、CakePHPが集約関数とグループ化を使って簡単なクエリを簡単に実行することを許していないというのはうんざりです。 – milosz

関連する問題