<?php
class BaseModel extends EMongoDocument
{
public $_id;
public $created_time;
public $updated_time;
public $deleted;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function getCollectionName()
{
return null;
}
public function rules()
{
return array(
array('_id', 'default', 'value' => new MongoId()),
array('deleted', 'default', 'value' => Constant::UNDELETE),
array('created_time', 'default', 'value' => new MongoDate()),
array('updated_time', 'default', 'value' => new MongoDate()),
);
}
public function attributeLabels()
{
}
}
然后,我们来定义一个实际会使用的Model--> User.
class User extends BaseModel {
public $name;
public $password;
public $nickname;
public $email;
public $height;
public $weight;
public $gender;
public $register_time;
public $last_login_time;
public static function model($className=__CLASS__) {
return parent::model($className);
}
/**
* @return string the associated collection name
*/
public function getCollectionName() {
return 'user';
}
public function rules() {
return array_merge(parent::rules(), array(
...
));
}
}
[PHP]MongoDB与Yii搭建API服务-1
在上一个项目中,我们采用MongoDB和Yii框架来为手机端提供API,那是我第一次学习并采用Yii来开发项目,确实深刻的体会到Yii的便捷和高效。代码写起来感觉非常的清晰,今天来对上一个项目里面的东西进行总结一下。主要是总结MongoDB和Yii的操作,当然也会写一些边边角角的东西。当前是采用Yii 1.1, MongoDB的扩展是1.3.6
如何整合
protected/extensions
目录下。config/main.php
中引入mongodb的扩展并配置连接参数,如下:我们先定义一个
BaseModel
, 在这个Model
中定义部分公共的属性。如下:然后,我们来定义一个实际会使用的Model-->
User
.定义好了
Model
之后,我们可以像操作其它AR
一样来操作了。对MongoDB的操作
对MongoDB的操作是通过
Model
来完成的。在EmongoDocument
中定义了不少操作DB的方法,如:EmongoCriteria
是用来封装条件的,在我们进行CRUD操作时都会使用到,需要掌握好。其使用方式如下: 第一种方式是使用array
来指定查询条件:另一种方式是直接对
EmongoCriteria
添加条件,如下:1.多个条件的组合。例如我要查询用户名是'user1',age是18的用户,只需要将上面的$condition稍做修改即可:
2.如果是表示或的关系
3.分页和排序
分页和排序的操作也是非常的简单,只要在
$criteria
对象上接着添加方法便好如果是采用
array
来指定分页和排序的参数,要注意array
的层次结构。以下使用一个官方的例子4.统计数量
User::model()->count($criteria)
MongoDBRef的使用
MongDBRef是用来表示两个表之间字段的关联关系。 假设有这么一个场景,员工和部门之间是一对多的关系。我们有一个
Employee
model和一个Dept
model,在Employee
model中会有一个$dept
的属性,这个$dept
属性并不是一个Dept
类型的实例,它是一个MongoDBRef
类型,有点类似于关系数据库中的外键。或以把它理解成是一个dept_id
指向的是Dept
表中的的_id
。于是有以下代码: