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

프로젝트 당 지불액 합계와 동일한 열을 내 인덱스보기에 포함하려고합니다. 이 필드로 정렬 할 수 있기를 원합니다.CakePHP 2.0 페이지 매김 및 합계 hasMany 관련 모델

여기에 비슷한 문제가 있지만 둘 다 페이지 매김에 관련이 없습니다.

내 현재의 (잘못된) 솔루션 : 당신은 아마 Payment 모델 상에 afterSave을 수행 할 것 같은

$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

보인다.

afterSave 함수 내에서 관련 Project에 대한 지불을 합산하는 MySQL SUM()을 사용하여 Project.payment_total에 저장합니다.

그런 다음, 당신은 쉽게 정렬 해당 필드에 의해 수 있으며, 그것은 단지

+0

(신규 또는 변경 지급있을 때 예) 필요 내가 '때 실행하기 때문에, 모든 페이지에 복잡한 MySQL을 실행하는 데에서 당신을 유지 이전에 알아 차렸지만, 지불 금액이 아닌 지불 합계를 유지하려고합니다. – milosz

+0

@milosz - 질문을 놓친 것을 깨닫고 내 대답을 편집했습니다. – Dave

+0

감사합니다. 작동하는 것 같습니다. 그러나, 나는 CakePHP가 집계 함수와 그룹을 가진 간단한 쿼리를 수행하는 쉬운 방법을 허용하지 않는다는 것을 알게된다. – milosz