Added different counter query support for Doctrine_Pager. Now it can use 2 different queries to paginate items. Added 4 new methods: setCountQuery, getCountQuery, setCountQueryParams and getCountQueryParams. If not defined a counter Doctrine_Query, the collector one is used. If no params were defined to be used in counter query, the ones passed by execute method are used
This commit is contained in:
parent
af32f80176
commit
e5f2aa5208
@ -38,6 +38,16 @@ class Doctrine_Pager
|
||||
*/
|
||||
protected $_query;
|
||||
|
||||
/**
|
||||
* @var Doctrine_Query $_countQuery Doctrine_Query object related to the counter of pager
|
||||
*/
|
||||
protected $_countQuery;
|
||||
|
||||
/**
|
||||
* @var array $_countQueryParams Hold the params to be used by Doctrine_Query counter object of pager
|
||||
*/
|
||||
protected $_countQueryParams;
|
||||
|
||||
/**
|
||||
* @var integer $_numResults Number of results found
|
||||
*/
|
||||
@ -96,7 +106,7 @@ class Doctrine_Pager
|
||||
protected function _initialize($params = array())
|
||||
{
|
||||
// retrieve the number of items found
|
||||
$count = $this->getQuery()->count($params);
|
||||
$count = $this->getCountQuery()->count($this->getCountQueryParams($params));
|
||||
$this->_setNumResults($count);
|
||||
|
||||
$this->_adjustOffset();
|
||||
@ -377,7 +387,7 @@ class Doctrine_Pager
|
||||
/**
|
||||
* getQuery
|
||||
*
|
||||
* Returns the Doctrine_Query object related to the pager
|
||||
* Returns the Doctrine_Query collector object related to the pager
|
||||
*
|
||||
* @return Doctrine_Query Doctrine_Query object related to the pager
|
||||
*/
|
||||
@ -390,9 +400,9 @@ class Doctrine_Pager
|
||||
/**
|
||||
* _setQuery
|
||||
*
|
||||
* Defines the maximum number of itens per page
|
||||
* Defines the collector query to be used by pager
|
||||
*
|
||||
* @param $query Accepts either a Doctrine_Query object or a string
|
||||
* @param Doctrine_Query Accepts either a Doctrine_Query object or a string
|
||||
* (which does the Doctrine_Query class creation).
|
||||
* @return void
|
||||
*/
|
||||
@ -406,6 +416,75 @@ class Doctrine_Pager
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* getCountQuery
|
||||
*
|
||||
* Returns the Doctrine_Query object that is used to make the count results to pager
|
||||
*
|
||||
* @return Doctrine_Query Doctrine_Query object related to the pager
|
||||
*/
|
||||
public function getCountQuery()
|
||||
{
|
||||
return ($this->_countQuery !== null) ? $this->_countQuery : $this->_query;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* setCountQuery
|
||||
*
|
||||
* Defines the counter query to be used by pager
|
||||
*
|
||||
* @param Doctrine_Query Accepts either a Doctrine_Query object or a string
|
||||
* (which does the Doctrine_Query class creation).
|
||||
* @return void
|
||||
*/
|
||||
public function setCountQuery($query)
|
||||
{
|
||||
if (is_string($query)) {
|
||||
$query = Doctrine_Query::create()->parseQuery($query);
|
||||
}
|
||||
|
||||
$this->_countQuery = $query;
|
||||
|
||||
$this->_setExecuted(false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* getCountQueryParams
|
||||
*
|
||||
* Returns the params to be used by counter Doctrine_Query
|
||||
*
|
||||
* @return array Doctrine_Query counter params
|
||||
*/
|
||||
public function getCountQueryParams($defaultParams = array())
|
||||
{
|
||||
return ($this->_countQueryParams !== null) ? $this->_countQueryParams : $defaultParams;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* setCountQueryParams
|
||||
*
|
||||
* Defines the params to be used by counter Doctrine_Query
|
||||
*
|
||||
* @param array Optional params to be used by counter Doctrine_Query.
|
||||
* If not defined, the params passed to execute method will be used.
|
||||
* @param boolean Optional argument that append the query param instead of overriding the existent ones.
|
||||
* @return void
|
||||
*/
|
||||
public function setCountQueryParams($params = array(), $append = false)
|
||||
{
|
||||
if ($append && is_array($this->_countQueryParams)) {
|
||||
$this->_countQueryParams = array_merge($this->_countQueryParams, $params);
|
||||
} else {
|
||||
$this->_countQueryParams = $params;
|
||||
}
|
||||
|
||||
$this->_setExecuted(false);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* execute
|
||||
*
|
||||
@ -418,7 +497,9 @@ class Doctrine_Pager
|
||||
*/
|
||||
public function execute($params = array(), $hydrationMode = Doctrine::FETCH_RECORD)
|
||||
{
|
||||
if (!$this->getExecuted()) {
|
||||
$this->_initialize($params);
|
||||
}
|
||||
|
||||
return $this->getQuery()->execute($params, $hydrationMode);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user