0

ユーザーが投稿を表示するたびに、カウントを追跡し、それをセッションに関連付けます。

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には次のフィールドがあります。

  • ID
  • submit_id
  • user_ip
  • 作成した

そのテーブルへの追加を追跡するように counterCache を設定しようとしていますが、設定方法がわかりません。$belongsTo現在、Submission モデル内にcounterCache を追加しています。

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

しかし、見つからないと言っていますSubmission.submissions_views_idsubmissionsドキュメントでは、というテーブルにフィールドを追加する必要があるということだけだったsubmissions_views_countので、これを機能させる方法がわかりませんか?

4

1 に答える 1

1
  1. モデル名は単数形にするSubmissionViews必要があるため、 SubmissionView.
  2. あなたの関連付けは正しくありません。SubmissionhasMany SubmissionView、属していません。
  3. counterCacheは、モデル ファイルではなく、SubmissionViewモデル内の belongsTo 構成内で指定する必要があります。説明書をもっとよく読んでください。SubmissionSubmission
于 2012-10-14T13:30:50.620 に答える