использование виртуальных полей для суммирования значений в cakephp

Я пытаюсь получить сумму голосов для данного пользователя.

Скажем, это таблица сообщений

id | body | user_id | vote_total | type 1 test 1 4 new 2 test2 1 3 new 3 test3 2 2 new 

Я пытаюсь получить следующий результат

 user_id | vote_total 1 7 2 2 

Вот моя функция в PostsController

  public function topvotes(){ $virtualFields = array('total' => 'SUM(Post.vote_total)'); $total = $this->Post->find('all', array( array('fields' => array('total'), 'recursive' => 1, 'group' => array('Post.user_id'), 'conditions'=>array('Post.type' => 'new' )))); $post = $this->Post->find('all', $total); $this->set('posts', $post); } 

Этот запрос работает (я пытался с phpmyadmin), но я не могу понять, как получить доступ к результирующему массиву

edit Я получил его для работы, используя следующий запрос

 $query = $this->Post->query("select posts.user_id, SUM(Posts.vote_total) from posts where posts.type = 'new' group by posts.user_id"); $this->set('posts', $query); 

когда я печатаю print_r, это массив

 Array ( [posts] => Array ( [user_id] => 7 ) [0] => Array ( [total] => 6 ) ) 1 

Related of "использование виртуальных полей для суммирования значений в cakephp"

Я думаю, что ваш массив испорчен. также, где вы устанавливаете виртуальные поля для модели? последнее, но не менее важное: почему запрос внутри запроса?

 public function topvotes() { $this->Post->virtualFields = array('total' => 'SUM(Post.vote_total)'); $posts = $this->Post->find('all', array( 'fields' => array('total'), 'recursive' => 1, 'group' => array('Post.user_id'), 'conditions'=>array('Post.type' => 'new') )); $this->set('posts', $posts); } 

Вы можете сделать то же самое следующим образом:

 $this->Post->virtualFields['TotalVotes'] = 0; $query = $this->Post->query("select posts.user_id, SUM(Posts.vote_total) as TotalVotes from posts where posts.type = 'new' group by posts.user_id"); $this->set('posts', $query); 

Эта страница документации , несомненно, поможет вам добиться того же, что и вам. Пожалуйста, спросите, не сработало ли оно для вас.