From dd5368b349f64c4141047c442385eb3fc31adab0 Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Sat, 3 Aug 2013 13:19:33 -0400 Subject: [PATCH] Refactored ActiveDataProvider. --- framework/yii/data/ActiveDataProvider.php | 52 +++++++++++++++++-------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/framework/yii/data/ActiveDataProvider.php b/framework/yii/data/ActiveDataProvider.php index cb33b28..64539fe 100644 --- a/framework/yii/data/ActiveDataProvider.php +++ b/framework/yii/data/ActiveDataProvider.php @@ -99,13 +99,11 @@ class ActiveDataProvider extends DataProvider * Returns the number of data models in the current page. * This is equivalent to `count($provider->models)`. * When [[pagination]] is false, this is the same as [[totalCount]]. - * @param boolean $refresh whether to recalculate the model count. If true, - * this will cause re-fetching of [[models]]. * @return integer the number of data models in the current page. */ - public function getCount($refresh = false) + public function getCount() { - return count($this->getModels($refresh)); + return count($this->getModels()); } /** @@ -120,7 +118,7 @@ class ActiveDataProvider extends DataProvider public function getTotalCount($refresh = false) { if ($this->getPagination() === false) { - return $this->getCount($refresh); + return $this->getCount(); } elseif ($this->_totalCount === null || $refresh) { if (!$this->query instanceof Query) { throw new InvalidConfigException('The "query" property must be an instance of Query or its subclass.'); @@ -142,39 +140,26 @@ class ActiveDataProvider extends DataProvider /** * Returns the data models in the current page. - * @param boolean $refresh whether to re-fetch the data models. * @return array the list of data models in the current page. - * @throws InvalidConfigException */ - public function getModels($refresh = false) + public function getModels() { - if ($this->_models === null || $refresh) { - if (!$this->query instanceof Query) { - throw new InvalidConfigException('The "query" property must be an instance of Query or its subclass.'); - } - if (($pagination = $this->getPagination()) !== false) { - $pagination->totalCount = $this->getTotalCount(); - $this->query->limit($pagination->getLimit())->offset($pagination->getOffset()); - } - if (($sort = $this->getSort()) !== false) { - $this->query->orderBy($sort->getOrders()); - } - $this->_models = $this->query->all($this->db); + if ($this->_models === null) { + $this->loadModels(); } return $this->_models; } /** * Returns the key values associated with the data models. - * @param boolean $refresh whether to re-fetch the data models and re-calculate the keys * @return array the list of key values corresponding to [[models]]. Each data model in [[models]] * is uniquely identified by the corresponding key value in this array. */ - public function getKeys($refresh = false) + public function getKeys() { - if ($this->_keys === null || $refresh) { + if ($this->_keys === null) { $this->_keys = array(); - $models = $this->getModels($refresh); + $models = $this->getModels(); if ($this->key !== null) { foreach ($models as $model) { if (is_string($this->key)) { @@ -207,4 +192,23 @@ class ActiveDataProvider extends DataProvider } return $this->_keys; } + + /** + * Performs query and load data models. + * @throws InvalidConfigException if [[query]] is not set or invalid. + */ + public function loadModels() + { + if (!$this->query instanceof Query) { + throw new InvalidConfigException('The "query" property must be an instance of Query or its subclass.'); + } + if (($pagination = $this->getPagination()) !== false) { + $pagination->totalCount = $this->getTotalCount(); + $this->query->limit($pagination->getLimit())->offset($pagination->getOffset()); + } + if (($sort = $this->getSort()) !== false) { + $this->query->orderBy($sort->getOrders()); + } + $this->_models = $this->query->all($this->db); + } }