/** * @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); }
/** * @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); }
/** * 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); }