usando campos virtuais para sumr valores em cakephp

Estou tentando obter a sum de votos para um determinado usuário.

Diga que esta é a tabela de posts

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

Estou tentando obter o seguinte resultado

 user_id | vote_total 1 7 2 2 

Aqui está a minha function no 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); } 

Esta consulta funciona (tentei com phpmyadmin), mas não consigo descobrir como acessar a matriz resultante

editei eu entendi que funcionasse usando a seguinte consulta

 $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); 

Quando escrevo print_r, esta é a matriz

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

Acho que sua matriz está enrugada. também, onde você configura os campos virtuais para o modelo? Por último, mas não menos importante: por que uma consulta dentro de uma consulta?

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

Você pode fazer o mesmo da seguinte forma:

 $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); 

Esta página de documentação certamente irá ajudá-lo a alcançar o mesmo que você precisava. Por favor, pergunte se não funcionou para você.