CakePHP是一个非常受欢迎的PHP框架,它有专门的 MongoDB datasource 类包。这里专门有一篇介绍CakePHP框架如何使用MongoDB存储的文章:Using
MongoDb with CakePHP。具体访问地址:http://mark-story.com/posts/view/using-mongodb-with-cakephp。
MongoDB datasource的两种方式:
- 下载一
- 下载二(git下载方式)
现在具体说一下MongoDB在CakePHP中的配置与应用:
类库存放
我们可以存放在Vendor或者Plugin目录下,然后再在AppController中引用就可以,具体就不赘述!
配置
在/config/database.php中配置MongoDB:
public $mongo = array(
'datasource' => 'Mongodb.MongodbSource',
'persistent' => false,
'host' => '127.0.0.1',
'login' => 'root',
'password' => 'root',
'port' => 27017,
'database' => 'mongoblog',
'prefix' => '',
//'encoding' => 'utf8',
);
AppController引用
CakePlugin::load('Mongodb');//这是把类库放在了Plugin目录下的引用方式
class AppController extends Controller {
public function beforeFilter(){
parent::beforeFilter();
$module = $this->name;
$action = $this->action;
}
}
我们可以在Controller中组织好我们需要Insert或update等的数据。然后再访问调用Model。下面再看一下Model是怎样的?
Model中的应用
看段代码
class Recodelog extends AppModel{
/**
* 模型名称
*
* @var string
* @access public
*/
public $name = "Recodelog"; //类名称
/**
* 无默认使用表
*
* @var string
* @access public
*/
public $useTable = 'logrecode';//你要访问的MongoDB中库的Collection
/**
* 默认使用数据库配置
*
* @var string
* @access public
*/
public $useDbConfig = 'mongo'; //使用的数据库
public $primaryKey = '_id';
//Collection的字段结构与类型
public $mongoSchema = array(
'user_id' => array('type'=>'integer'),
'user_name' => array('type'=>'string'),
'operate_module_name'=>array('type'=>'string'),
'operate_function_name'=>array('type'=>'string'),
'operate_ip'=>array('type'=>'string'),
'operate_time'=>array('type'=>'datetime')
);
/**
*
* @param $recodeInfo
*/
public function addLogRecode($recodeInfo = array()){
$flag = $this->save(array('user_id'=>$recodeInfo['id'], 'user_name'=>$recodeInfo['username'], 'operate_module_name'=>$recodeInfo['module'],
'operate_function_name'=>$recodeInfo['action'],'operate_ip'=>$recodeInfo['ip'],'operate_time'=>$recodeInfo['time']));
return $flag;
}
}
这段代码包括了MongoDB中Collection的选择及添加一条记录。可以看到用的是save方法。具体可以看手册:
这样就应该知道save这个方法怎么用了!其实save里接收的是一个数组,数组键为你字段名称。
下面是我测试的成果,有数据为证: