SO と同様に、自分のサイトに評判システムを組み込むことに取り組んでいます。構造は次のとおりです。
ユーザー hasMany プロジェクトユーザー
hasMany
回答
プロジェクト hasMany 評価
回答 hasMany 評価
評価が属するプロジェクト
評価の値フィールドは 1 ~ 5 の数値になります。ユーザーは、5 つ星のレビューごとに +10、4 つ星のレビューごとに +5、3 つ星のレビューごとに +1 を獲得する必要があります。私が現在セットアップしている方法は次のとおりです。UsersController の recalcRep($id) アクション (必要に応じて他のコントローラーの他のアクションと共に) は、User モデル内の calcRep($id) メソッドを呼び出します。 $id の ID を持つユーザーの評判を計算します。
public function calcRep($id) {
$rep = 0;
$data = $this->Rating->find('all'); //does not work, because it is not directly associated
foreach($data as $rating) {
if(($rating['Rating']['parent_type'] == 'Project' && $rating['Project']['user_id']==$id) or ($rating['Rating']['parent_type'] == 'Answer' && $rating['Answer']['user_id']==$id)) {
if($rating['Rating']['value']==5) {
$rep += 10;
} else if($rating['Rating']['value']==4) {
$rep += 5;
} else if($rating['Rating']['value']==3) {
$rep += 2;
}
}
}
$data['User']['reputation'] = $rep;
$this->save($data);
}
私はこれに完全に間違った方法でアプローチしている可能性がありますが、特定のユーザーの子供に属するすべての評価を見つける方法がわかりません。