yii 用 mongodb 插件 YiiMongoDbSuite

  • Post author:
  • Post category:其他


YiiMongoDbSuite下载地址: http://www.yiiframework.com/extension/yiimongodbsuite/

假设你的yii和mongodb环境已经搭建好,并且YiiMongoDbSuite已经放在protected/extensions

那么你protected/config/main.php 应该是这样的

'import' => array(
      ...
      'ext.YiiMongoDbSuite.*',
    ),
 
    'components' => array(
      ...
      'mongodb' => array(
        'class'            => 'EMongoDB',
        'connectionString' => 'mongodb://localhost',
        'dbName'           => 'myDatabaseName',
        'fsyncFlag'        => true,
        'safeFlag'         => true,
        'useCursor'        => false
      ),
    ),


然后根据你自己的环境稍加修改即可

接下来开始写代码了看controller层代码, 注释部分为采用原生的写法类似于你使用Yii::app()->db来获取数据库连接一样

class LoginController extends Controller
{
	
	//根据id查找用户例如 http://localhost:8082/api/login/UserList/415824043082514432 注:先配置好vhost
	public function actionUserList($num) {
		$_result = UserMongo::model()->findUser($num);
		//$collection = Yii::app()->mongodb->getDbInstance()->selectCollection('pcztest');
		//$_result = $collection->find();
		$this->sendResponse(200, $_result);
	}
	
	// http://localhost:8082/api/login
	public function doRestCreate($data) {
		$model = new UserMongo();
		$model->ac = 'ac1';
		$model->bc = 'bc2';
		$res = $model->save();

		//$collection = Yii::app()->mongodb->getDbInstance()->selectCollection('pcztest');
		//$content = array(
		//	'ac'=>'叶子-吴佰清',
		//	'bc'=>'吴佰清',
		//	'ff'=>234,
		//	'dd'=>4444,
		//	'cc'=>'cc'
		//);
		//$res = $collection->insert($content);
		var_dump($res);
	}
}

然后是model代码

class UserMongo extends EMongoDocument
{
	public $ac, $bc;
 	public static function model($className = __CLASS__) {
 		return parent::model($className);
 	}
	
	public function getCollectionName()
	{
		return 'pcztest';
	}
 	// public function tableName() {
 		// return '{{passport_users}}';
 	// }
	
	public function findUser($n) {
		$results = $this->findAll();
		return $results;
	}
}

需要注意的问题:采用model调用save的方式保存跟原生insert保存区别不大,但是在查询时你的model层定义了那些属性只会查出相应的属性,而其他的则不会查出来

例如上面这个model只定义了$ac, $bc;2个属性若你再插入collection中一个字段‘ff’的话在查询时是不会显示出来的



版权声明:本文为neilson123456原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。