2012-09-18 4 views
3

문제 :CakePHP의 counterCache 여러 counterScope - 논리 문제

나는 두 가지 모델이 있습니다 판매점 Testdrive을 (Testdrive가 dealer_id를 통해 판매점에 속한다). 나는 딜러에 대한 실시간 통계를 보여주고 싶은 : 처리 총 (Testdrive.active = 1), (Testdrive.active = 1 & & Testdrive.processed = 1) ...

내가 약 100 개 딜러와 10000 testdrives이 . 카운트 기반 SQL은 약 10 초 (비효율적) 걸립니다. 이제는 매 시간마다 실행되는 cronjob이 있지만 실시간 통계는 없습니다.

나는이 같은 시도 :

var $belongsTo = array(
    'Dealer' => array(
     'className' => 'Dealer', 
     'foreignKey' => 'dealer_id', 
     'counterCache' => 'active', 
     'counterScope' => array('Testdrive.active' => 1), 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ), 
    'Dealer' => array(
     'className' => 'Dealer', 
     'foreignKey' => 'dealer_id', 
     'counterCache' => 'processed', 
     'counterScope' => array('Testdrive.active' => 1, 'Testdrive.processed' => 1), 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

을 ...하지만 난 belongsTo를 => 'Dealear'값을 덮어 씁니다.

counterScope 배열이있는 counterCache 배열을 사용할 수 있습니까?

var $belongsTo = array(
    'Dealer' => array(
     'className' => 'Dealer', 
     'foreignKey' => 'dealer_id', 
     'counterCache' => array('active', 'processed'), 
     'counterScope' => array('active' => array('Testdrive.active' => 1), 'processed' => array('Testdrive.active' => 1, 'Testdrive.processed' => 1)), 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ), 
); 

답변

1

the documentation이의 예 (지금)가있다. 디폴트 값 (className, foreignKey 등) 키를 정의 할 필요가 없습니다

class TestDrive extends AppModel { 

    public $belongsTo = array(
     'Dealer' => array(
      'counterCache' => array(
       'active' => array(
        'TestDrive.active' => 1 
       ), 
       'processed' => array(
        'TestDrive.active' => 1, 
        'TestDrive.processed' => 1 
       ) 
      ) 
     ) 
    ); 
} 

참고 : 것 질문의 예에 적용.