按hasMany记录的数量排序 - COUNT(RelatedModel.field)

时间:2011-08-10 19:23:12

标签: cakephp cakephp-1.3 cakephp-appmodel containable

我有一个模型,Track,有很多投票。投票模型有一个名为“值”的字段。我想做的是按照他们的投票价值的总和对跟踪记录进行排序(这意味着我不能使用counterCache)。

当然,尝试放置'order'=>'SUM(Vote.value)'之类的内容会因“未知列...”错误而失败。

我会在查找中找到所有内容('all')然后将其排序,但我也需要分页。

我想出的最好的想法是在Track模型中添加一个字段,用于跟踪所有投票的总价值 - 类似于counterCache所做的但反映了各种投票的不同价值。

有更简单的方法吗?

感谢阅读!

1 个答案:

答案 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;
}