/** * This is based on CActiveRecord::query(). * @param CActiveRecord $model * @param CDbCriteria $criteria * @return array containing CDbDataReader and CActiveFinder objects */ private function createDataReader($model, $criteria) { $model->beforeFindInternal(); $model->applyScopes($criteria); if (empty($criteria->with)) { $finder = null; $command = $model->getCommandBuilder()->createFindCommand($model->tableSchema, $criteria, $model->getTableAlias()); } else { $finder = new EActiveFinder($model, $criteria->with); $command = $finder->createCommand($criteria); } $command->prepare(); $command->execute($command->params); return array(new CDbDataReader($command), $finder); }
/** * Function returns CActiveRecord model. * If param $id is not passed than return new model. * If model not found by id then send response with 404 error code and terminate app if $this->sendToEndUser is true. * * @param CActiveRecord $model Model class instance * @param int $id id attribute for which you want to find a record. * @param boolean $newIfNull create new model in $id is null. * If $id is not set then return empty model * @return CActiveRecord model */ public function getModel(CActiveRecord $model, $id = null, $newIfNull = true) { if (is_null($id) && $newIfNull) { return new $model(); } $this->criteria = new CDbCriteria(); $this->criteria->addCondition($model->getTableAlias($this->tableAliasQuotes) . "." . $this->idParamName . "=:id"); $this->criteria->params[':id'] = $id; $this->criteria->mergeWith($this->baseCriteria); $model = $model->find($this->criteria); if (is_null($model)) { $this->statusCode = 404; if ($this->sendToEndUser) { $this->sendData($this->notFoundErrorResponse, 404); } } return $model; }