我正在努力将声誉系统整合到我的网站中,类似于 SO。以下是它的结构:
User hasMany Project
User hasMany Answer
Project hasMany Rating
Answer hasMany Rating
Rating belongsTo Project where Rating.parent_type = Project
Rating belongsTo Answer where Rating.parent_type = Answer
评级的值字段将是一个介于 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);
}
我可能以完全错误的方式处理这个问题,但我不知道如何找到属于特定用户的任何孩子的所有评级。