Esempio n. 1
0
 /**
  * @see CActiveDataProvider::fetchData()
  * @return array
  */
 public function fetchData()
 {
     $criteria = $this->getCriteria();
     // I have not refactored this line considering that the condition may have changed from total item count to here, maybe.
     $this->_cursor = $this->model->find(isset($criteria['condition']) && is_array($criteria['condition']) ? $criteria['condition'] : array(), isset($criteria['project']) && !empty($criteria['project']) ? $criteria['project'] : array());
     // If we have sort and limit and skip setup within the incoming criteria let's set it
     if (isset($criteria['sort']) && is_array($criteria['sort'])) {
         $this->_cursor->sort($criteria['sort']);
     }
     if (isset($criteria['skip']) && is_int($criteria['skip'])) {
         $this->_cursor->skip($criteria['skip']);
     }
     if (isset($criteria['limit']) && is_int($criteria['limit'])) {
         $this->_cursor->limit($criteria['limit']);
     }
     if (isset($criteria['hint']) && (is_array($criteria['hint']) || is_string($criteria['hint']))) {
         $this->_cursor->hint($criteria['hint']);
     }
     if (($pagination = $this->getPagination()) !== false) {
         $pagination->setItemCount($this->getTotalItemCount());
         $this->_cursor->limit($pagination->getLimit());
         $this->_cursor->skip($pagination->getOffset());
     }
     if (($sort = $this->getSort()) !== false) {
         $sort = $sort->getOrderBy();
         if (count($sort) > 0) {
             $this->_cursor->sort($sort);
         }
     }
     return iterator_to_array($this->_cursor, false);
 }
Esempio n. 2
0
 /**
  * @see CActiveDataProvider::fetchData()
  * @return array
  */
 public function fetchData()
 {
     $criteria = $this->getCriteria();
     // I have not refactored this line considering that the condition may have changed from total item count to here, maybe.
     $this->_builder = new EMongoQueryBuilder($this->model, isset($criteria['condition']) && is_array($criteria['condition']) ? $criteria['condition'] : [], isset($criteria['project']) && !empty($criteria['project']) ? $criteria['project'] : []);
     $this->options['condition'] = isset($criteria['condition']) && is_array($criteria['condition']) ? $criteria['condition'] : [];
     $this->options['projection'] = isset($criteria['project']) && !empty($criteria['project']) ? $criteria['project'] : [];
     // If we have sort and limit and skip setup within the incoming criteria let's set it
     if (isset($criteria['sort']) && is_array($criteria['sort'])) {
         $this->_builder->sort($criteria['sort']);
     }
     if (isset($criteria['skip']) && is_int($criteria['skip'])) {
         $this->_builder->skip($criteria['skip']);
     }
     if (isset($criteria['limit']) && is_int($criteria['limit'])) {
         $this->_builder->limit($criteria['limit']);
     }
     if (isset($criteria['hint']) && (is_array($criteria['hint']) || is_string($criteria['hint']))) {
         $this->_builder->hint($criteria['hint']);
     }
     if (($pagination = $this->getPagination()) !== false) {
         $pagination->setItemCount($this->getTotalItemCount());
         $this->_builder->limit($pagination->getLimit());
         $this->_builder->skip($pagination->getOffset());
     }
     if (($sort = $this->getSort()) !== false) {
         $sort = $sort->getOrderBy();
         if (count($sort) > 0) {
             $this->_builder->sort($sort);
         }
     }
     //                var_dump(iterator_to_array($this->_builder->find()));die;
     return $this->_builder->queryAll(true);
 }
Esempio n. 3
0
 /**
  * Find some records
  * @param array|EMongoCriteria $criteria
  * @param array|string[] $fields
  * @return EMongoCursor|EMongoDocument[]
  */
 public function find($criteria = array(), $fields = array())
 {
     $this->trace(__FUNCTION__);
     $this->beforeFind();
     // Apparently this is applied before even scopes...
     if ($criteria instanceof EMongoCriteria) {
         $c = $criteria->mergeWith($this->getDbCriteria())->toArray();
         $criteria = array();
     } else {
         $c = $this->getDbCriteria();
     }
     $query = $this->mergeCriteria(isset($c['condition']) ? $c['condition'] : array(), $criteria);
     $project = $this->mergeCriteria(isset($c['project']) ? $c['project'] : array(), $fields);
     Yii::trace('Executing find: ' . '{$query:' . json_encode($query) . ',$project:' . json_encode($project) . (isset($c['sort']) ? ',$sort:' . json_encode($c['sort']) . ',' : '') . (isset($c['skip']) ? ',$skip:' . json_encode($c['skip']) . ',' : '') . (isset($c['limit']) ? ',$limit:' . json_encode($c['limit']) . ',' : '') . '}', 'extensions.MongoYii.EMongoDocument');
     if ($this->getDbConnection()->enableProfiling) {
         $token = 'extensions.MongoYii.EMongoDocument.query.' . $this->collectionName() . '.find(' . '{$query:' . json_encode($query) . ',$project:' . json_encode($project) . (isset($c['sort']) ? ',$sort:' . json_encode($c['sort']) . ',' : '') . (isset($c['skip']) ? ',$skip:' . json_encode($c['skip']) . ',' : '') . (isset($c['limit']) ? ',$limit:' . json_encode($c['limit']) . ',' : '') . '})';
         Yii::beginProfile($token, 'extensions.MongoYii.EMongoDocument.find');
     }
     if ($c !== array()) {
         $cursor = new EMongoCursor($this, $query, $project);
         if (isset($c['sort'])) {
             $cursor->sort($c['sort']);
         }
         if (isset($c['skip'])) {
             $cursor->skip($c['skip']);
         }
         if (isset($c['limit'])) {
             $cursor->limit($c['limit']);
         }
         $this->resetScope(false);
     } else {
         $cursor = new EMongoCursor($this, $criteria, $project);
     }
     if ($this->getDbConnection()->enableProfiling) {
         Yii::endProfile($token, 'extensions.MongoYii.EMongoDocument.find');
     }
     return $cursor;
 }
 /**
  * Find some records
  * @param array|EMongoCriteria $criteria
  * @param array|string[] $fields
  * @return EMongoCursor|EMongoDocument[]
  */
 public function find($criteria = array(), $fields = array())
 {
     $this->trace(__FUNCTION__);
     $this->beforeFind();
     // Apparently this is applied before even scopes...
     if ($criteria instanceof EMongoCriteria) {
         $c = $criteria->mergeWith($this->getDbCriteria())->toArray();
         $criteria = array();
     } else {
         $c = $this->getDbCriteria();
     }
     if ($c !== array()) {
         $cursor = new EMongoCursor($this, $this->mergeCriteria(isset($c['condition']) ? $c['condition'] : array(), $criteria), $this->mergeCriteria(isset($c['project']) ? $c['project'] : array(), $fields));
         if (isset($c['sort'])) {
             $cursor->sort($c['sort']);
         }
         if (isset($c['skip'])) {
             $cursor->skip($c['skip']);
         }
         if (isset($c['limit'])) {
             $cursor->limit($c['limit']);
         }
         $this->resetScope();
         return $cursor;
     }
     return new EMongoCursor($this, $criteria, $fields);
 }