Postagem

Aqui é onde faço postagens de coisas que acho interessante.

CakePHP - Problema com paginação e select distinct

Postagem do dia 08/06/2013 na categoria CakePHP



Ao listar todas as despesas no meu sistema usando select distinct, o cake tentava acessar a última página e falava que a url não podia ser encontrada.

Exemplo:


<?php
class DespesasController extends AppController {

	public $paginate = array(
		'fields' => array(
			'DISTINCT Despesa.numero',
			'Despesa.tipo'
		),
		'recursive' => -1,
		'limit' => 3,
		'order' => 'tipo ASC'
	);	



Na hora de buscar os dados, o paginate usava o distinct, mas quando o ele contava todos os registros para montar a paginação, não usa o distinct, fazendo com que o número de paginas ficasse errada.

No model Despesa adicionei um método chamado paginateCount(), que irá sobrescrever o método já existente alterando seu comportamento e fazendo com que o paginate use o distinct ao criar a paginação.


<?php
    /**
     * paginateCount method
     * Sobreposicao do metodo pai, para que a paginacao conte registros que tenham distinct na sua clausula
     */
    function paginateCount($conditions = null, $recursive = 0, $extra = array())
    {
         $count = $this->find('count', array(
         'fields' => 'DISTINCT Despesa.numero',
            'conditions' => $conditions
        ));
        return $count;
    }   

Feito isso a paginação passou funcionar perfeitamente.



Deixe seus comentários abaixo: