我有一个模型,Track,有很多投票。投票模型有一个名为“值”的字段。我想做的是按照他们的投票价值的总和对跟踪记录进行排序(这意味着我不能使用counterCache)。
当然,尝试放置'order'=>'SUM(Vote.value)'
之类的内容会因“未知列...”错误而失败。
我会在查找中找到所有内容('all')然后将其排序,但我也需要分页。
我想出的最好的想法是在Track模型中添加一个字段,用于跟踪所有投票的总价值 - 类似于counterCache所做的但反映了各种投票的不同价值。
有更简单的方法吗?
感谢阅读!
答案 0 :(得分:0)
好吧,我最终在Track模型中添加了一个列(“vote_score”),并在添加/删除投票时更新了它。这是代码,万一有人感兴趣。它似乎工作,但没有广泛测试它。在投票模型中:
public function afterSave(){
$this->Track->id = $this->data['Vote']['track_id'];
$this->Track->saveField('vote_score','vote_score' + $this->data['Vote']['value']);
}
public function beforeDelete(){
$vote = $this->Vote->read();
$this->Track->id = $vote['Vote']['track_id'];
$this->Track->saveField('vote_score','vote_score' - $vote['Vote']['value']);
return true;
}