Cake Paginator mit group by

Der Standard Paginator von Cake kann kein “group by” absetzen.
Um das zu ändern muss man die beiden Methoden paginate und paginateCount im Model überschreiben:

public function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) {
		$conditions[] ="1 = 1 GROUP BY block_id";
		$recursive = -1;
	 	return $this->findAll($conditions, $fields, $order, $limit, $page, $recursive);
	}

Hier noch abfragen wieviele Spalten betroffen sind:

public function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
		$sql = "SELECT DISTINCT id  FROM tabelle";
		$this->recursive = $recursive;
		$results = $this->query($sql);
		return count($results);
	}

Danach kann man den Paginator wie gewohnt im Controller aufrufen:

$this->paginate = array(
				'Tabelle' 	=> array('limit' => 20,
                           	'order' 	=> array('id' => 'desc'),
                           	'group' 	=> array('tab_id'))
                          );

Leave Your Comment