Упорядочивание по количеству записей hasMany - COUNT (RelatedModel.field) - PullRequest
1 голос
/ 10 августа 2011

У меня есть модель Track, которая имеет много голосов. Модель голосования имеет поле под названием «значение». Я хочу отсортировать записи треков по сумме значений их голосов (что означает, к сожалению, я не могу использовать counterCache).

Конечно, попытка указать что-то вроде 'order'=>'SUM(Vote.value)' завершается неудачно с ошибкой "неизвестный столбец ...".

Я бы просто нашел все ("все"), а потом разбирал, но мне тоже нужна нумерация страниц.

Лучшая идея, которую я придумала, - добавить в модель Track поле, которое отслеживает общую стоимость всех голосов - что-то вроде того, что делает counterCache, но отражает различную ценность различных голосов.

Есть ли более простой способ сделать это?

Спасибо за чтение!

1 Ответ

0 голосов
/ 17 августа 2011

Что ж, в итоге я добавил колонку ("voice_score") в модель Track и обновил ее, когда голос добавлен / удален.Вот код, на случай, если кому-то будет интересно.Похоже, что он работает, но не проверял его всесторонне.В модели голосования:

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;
}
...