以下に示すように、2つの差分テーブルがあります。
ユーザーと投稿
投稿テーブルの数でユーザーのテーブルの順序からデータが必要です
関係は次のように定義されます。
User Model:
public $hasMany = array('Post');
Post Model
Public $belongsTo = array('User');
以下に示すように、2つの差分テーブルがあります。
ユーザーと投稿
投稿テーブルの数でユーザーのテーブルの順序からデータが必要です
関係は次のように定義されます。
User Model:
public $hasMany = array('Post');
Post Model
Public $belongsTo = array('User');
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
));
}