2011-08-10 9 views
1

私はモデルhasMany Voteを持っています。投票モデルには「値」というフィールドがあります。私がしたいのは、投票レコードの値を投票の合計で並べ替えることです(残念ながらcounterCacheを使用することはできません)。hasManyレコードの数で注文する - COUNT(RelatedModel.field)

もちろん、'order'=>'SUM(Vote.value)'のようなものを入力しようとすると、「不明な列...」というエラーが発生します。

私はfind( 'all')内のすべてを取得してから、後で並べ替えることになりますが、ページネーションも必要です。

私が思いついたベストアイデアは、すべての投票の合計値を追跡するトラックモデルにフィールドを追加することです。counterCacheのように、さまざまな投票の異なる値を反映します。

これを行う簡単な方法はありますか?

読んでいただきありがとうございます!

答えて

0

まあ、投票モデルを追加したり削除したりすると、トラックモデルに列(「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; 
} 
関連する問題