1

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

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

我会把所有东西都放在 find('all') 中,然后再整理出来,但我也需要分页。

我想出的最好的想法是在 Track 模型中添加一个字段来跟踪所有投票的总价值——就像 counterCache 所做的那样,但反映了各种投票的不同价值。

有没有更简单的方法来做到这一点?

谢谢阅读!

4

1 回答 1

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;
}
于 2011-08-17T17:24:45.797 回答