/** * Support mongo models interface. * * @param \EMongoDocument $model * @param string|array $where * @throws ApiException, NotFoundApiException */ private function mongoGet($model, $where = null) { $criteria = new \EMongoCriteria(); if ($id = \Yii::app()->request->getParam(self::ID, false)) { $this->data = $model->findByPk($id); } else { if ($ids = \Yii::app()->request->getParam(self::IDS, false)) { // something } else { $params = $this->getPaginationParams(); $criteria->offset($params['offset']); $criteria->limit($params['limit']); if ($order = \Yii::app()->request->getParam(self::ORDER, false)) { $params = explode(' ', $order); $criteria->sort($params[0], $params[1] == 'desc' ? \EMongoCriteria::SORT_DESC : \EMongoCriteria::SORT_ASC); } if ($where) { if (is_array($where)) { foreach ($where as $cond) { $params = explode(' ', $cond); if ($params[1] == 'in') { $params[2] = $this->manageInCondition($params[2]); } $criteria->addCond($params[0], $params[1], is_numeric($params[2]) ? (int) $params[2] : $params[2]); } } else { $params = explode(' ', $where); if ($params[1] == 'in') { $params[2] = $this->manageInCondition($params[2]); } $criteria->addCond($params[0], $params[1], is_numeric($params[2]) ? (int) $params[2] : $params[2]); } } $this->data = $model->findAll($criteria); if ($this->data == null) { throw new NotFoundApiException(); } } } }