Exemplo n.º 1
0
 /**
  * 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();
             }
         }
     }
 }