2012-10-14 4 views
0

사용자가 제출을 볼 때마다, 나는 수를 추적하고 세션에 넥타이 :CakePHP로 조회수를 추적하기 위해 counterCache()를 어떻게 사용할 수 있습니까?

SubmissionsController :

// Count view 
if ($this->Session->check('viewed_submission_' . $submissionId) !== true) { 
    $clientIp = ip2long($this->request->clientIp()); 
    $this->SubmissionsViews->countView($submissionId, $clientIp); 
    $this->Session->write('viewed_submission_' . $submissionId, true); 
} 

가 나는 SubmissionsViews 테이블에 그들을 추적하고 있습니다.

SubmissionsViews 모델 :

class SubmissionsViews extends AppModel { 

    var $name = 'SubmissionsViews'; 

    var $belongsTo = array(
     'Submission' => array(
      'className' => 'Submission' 
     ) 
    ); 

    public function countView($submissionId, $clientIp) { 
     $this->set('submission_id', $submissionId); 
     $this->set('user_ip', $clientIp); 
     $this->save($this->data); 
    } 
} 

내 SubmissionsView 테이블 submissions_views에는 다음 필드가 있습니다

  • user_ip
  • 을 만들어 submission_id

    • ID를

      해당 테이블에 추가 기능을 추적하기 위해 counterCache를 설정하려고하지만 설정 방법을 모르겠습니다.

      class Submission extends AppModel { 
          var $belongsTo = array(
           'User' => array(
            'className' => 'User' 
           ), 
           'SubmissionsViews' => array(
            'counterCache' => true 
           ) 
          ); 
      

      을하지만 그것은 Submission.submissions_views_id을 찾을 수없는 나에게 말하고 : 나는 현재 내 제출 모델 내에서 내 $belongsTo에 counterCache을 추가 해요. 문서에서 모든 것은 내가 submissions 테이블에 submissions_views_count이라는 필드를 추가해야하므로이 작업을 수행하는 방법이 혼란 스럽습니다.

    답변

    1
    1. 모델 이름은 단일이어야하므로 SubmissionViewsSubmissionView이어야합니다.
    2. 귀하의 연결이 잘못되었습니다. Submission hasMany SubmissionView, belongsTo가 아닙니다.
    3. 카운터 캐시는 Submission 모델 파일이 아니라 Submission의 belongsTo 구성 안의 SubmissionView 모델에서 지정해야합니다. 설명서를 자세히 읽으십시오.
    +0

    내 실수. 나는 그것을 고맙게 생각한다. 다시 돌아가서 명명 규칙을 다시 읽어야합니다. 고맙습니다. –