1

以下に示すように、2つの差分テーブルがあります。

ユーザーと投稿

投稿テーブルの数でユーザーのテーブルの順序からデータが必要です

関係は次のように定義されます。

User Model:

public $hasMany = array('Post');

Post Model

Public $belongsTo = array('User');
4

1 に答える 1

2

counterCache - count() をキャッシュする

この関数は、関連するデータの数をキャッシュするのに役立ちます。find('count')を介してレコードを手動でカウントする代わりに、モデル自体が関連する$hasManyモデルへの追加/削除を追跡し、親モデル テーブル内の専用の整数フィールドを増減します。

フィールドの名前は、単数形のモデル名とそれに続くアンダースコアと単語「count」で構成されます。

my_model_count

ImageCommentというモデルとImageというモデルがあるとします。新しい INT フィールドをイメージテーブルに追加し、 image_comment_countという名前を付けます。

カウンターフィールドを追加したら、準備完了です。counterCacheキーを追加して関連付けで counter-cache を有効にし、値をtrueに設定します。

<?php
class Image extends AppModel {
    public $belongsTo = array(
        'ImageAlbum' => array('counterCache' => true)
    );
}

今後、 ImageAlbum に関連付けられたImageを追加または削除するたびに、 image_count内の数値が自動的に調整されます。

counterScopeを指定することもできます。これにより、カウンター値を更新するタイミング (見方によっては更新しないタイミング) をモデルに伝える単純な条件を指定できます。

Image モデルの例を使用すると、次のように指定できます。

<?php
class Image extends AppModel {
    public $belongsTo = array(
        'ImageAlbum' => array(
            'counterCache' => true,
            'counterScope' => array('Image.active' => 1) // only count if "Image" is active = 1
    ));
}
于 2012-09-06T10:31:51.967 に答える