那些年,我用Thinkphp5集成mongoDB遇到的坑
据说Thinkphp5可以很方便的集成MongoDB,于是试了一下,结果全是坑啊,于是我就这样一步一步的踩过来了。
前言
公司的系统升级,需要将核心数据迁移到mongoDB上,同时,我们的开发框架也要升级,之前是ThinkPHP3.2的,现在要用TP5来做开发,于是如何使用TP5来操作MongoDB成为了摆在眼前的难题。也许对有的人而言,这是个比较简单的问题,但是对于公司的同事而言,这两个东西都是陌生的,之前都没有接触过,所以难免的会出现很多问题。但是为了后续的扩展,我们还是毅然决然的踩了下去。果然,踩出了一条坑坑洼洼的泥泞大道。
开始
1)安装ThinkPHP5
2)安装MongoDB
3)将MongoDB集成到ThinkPHP5里面
4)安装rockmongo,管理mongodb
我本地的环境是windows(32位) + php5.6.27(nts) + apache。
一、安装ThinkPHP5
ThinkPHP5的安装方式有很多,也很简单。我采用的是Git的方式直接从Github克隆的方式。这里不再赘述。
安装方式: http://www.kancloud.cn/manual/thinkphp5/118006
二、安装MongoDB
好吧,从这里开始,我踏上了一条漫漫踩坑之路。
由于我系统是32位的,无法下载最新的mongodb,只能下载3.2.12版的(当时最新的是3.4),不顾无所谓,能用就行。
下载地址:https://www.mongodb.com/download-center\#previous
![Image 1][]
接着,安装mongoDB。安装教程可参考:http://www.runoob.com/mongodb/mongodb-window-install.html
安装mongo都没有什么问题,下一步下一步就可以了。但是, 我在把mongo安装为系统服务的时候遇到了问题。
mongod.exe —bind_ip yourIPadress —logpath “C:\data\dbConf\mongodb.log” —logappend —dbpath “C:\data\db” —port yourPortNumber —serviceName “YourServiceName” —serviceDisplayName “YourServiceName” —install
服务安装成功了,但是却无法启动,报错100.
于是去网上找了很多资料,都没能解决我的问题。直到我看到了这篇文章http://blog.csdn.net/jiadajing267/article/details/54134965
我按照文章中的方法,将mongodb安装路径下data文件中有两个文件一个mongod.lock删除,然后重新试了一下,就ok了。
另外,可能是我环境的原因,我在执行上面的代码的时候需要加入两个参数才可以:—journal —storageEngine mmapv1
总之,搞了半天,mongodb终于安装成功了。
三、将mongodb集成到thinkphp5中
首先,需要安装mongo扩展。https://s3.amazonaws.com/drivers.mongodb.org/php/index.html。我下载的是最新的。
![Image 1][]
下载完之后,将php_mongo.dll放到php的ext目录下,然后在php.ini中加入extension=php_mongo.dll,重启服务器(我用的是phpstudy)
用phpinfo查看,mongo扩展安装成功了。
![Image 1][]
然后,我在tp5中用mongoClient类调取mongo数据,成功了。代码如下:
$m = new \MongoClient();
$db = $m->runoob;
$collection = $db->col;
//dump($collection);
//插入文档
$document = array(
"title" => "MongoDB",
"description" => "database",
"likes" => 100,
"url" => "http://www.runoob.com/mongodb/",
"by" => "菜鸟教程",
"likes" => 50
);
//dump($collection->insert($document));
//查找文档
$list = $collection->find();
foreach($list as $v) {
dump($v);
}
但是,问题来了,我不能在项目中用原生的mongo库啊,我想能够将TP5和mongo集成,让TP5能够像操作mysql一样操作mongo,我所需做的只是将database.php中的配置改为mongo的配置就可以了。
我去TP的官网看了下,TP5是支持用composer的方式安装mongo扩展的。http://www.kancloud.cn/manual/thinkphp5/167865
于是,我先安装composer。安装composer的过程很多简单,这里不再赘述,不会的同学可以直接到https://getcomposer.org/download/去学习安装方法。有个小插曲是安装composer的过程中报错了,原来是我有个扩展库有点问题,我将那个扩展库去掉就可以了。
安装完composer之后,进入项目根目录,按照教程运行composer require thinkphp/think-mongo即可。
很简单吧,谁知道,这才是真正开始的坑啊,让我费了好久的时间。
因为我在cmd中运行上面的命令,完全没有反应,过了很久,才报错。错误如下:
![Image 1][]
没办法,去网上找了很多资料,参照改了很多,都没有用。终于,看到了下面的一篇文章。
http://www.thinkphp.cn/topic/45113.html。里面说是镜像地址错了的原因。
![Image 1][]
很有可能就是这个原因,于是参考文章所说,执行命令
composer config repo.packagist composer https://packagist.phpcomposer.com
然后再执行命令composer require thinkphp/think-mongo。
可以了,在vendor目录下多了两个目录
![Image 1][]
下面,开始集成mongoDB。
1)修改database.php
![Image 1][]
2)在controller中使用DB库读取mongo
![Image 1][]
哇哈哈哈哈,成功了成功了!
个屁!!!!!
只要配置了database.php,就会报错
require mongodb > 1.0
可是,我不是安装了mongodb了吗?我的mongodb是3.2.14的啊,怎么还会有这个错误。
通过查找资料,发现,原来这里的错误是因为我没有安装mongodb扩展造成的。(注意:上面我只安装了php_mongo.dll,没有安装php_mongodb.dll)
可以参考这个资料安装mongodb扩展:http://www.thinkphp.cn/topic/40328.html
![Image 1][]
安装完之后,可以运行了。
四、安装rockmongo
http://www.runoob.com/mongodb/working-with-rockmongo.html
这个很简单,就跟安装phpmyadmin一样的。安装之后的登录密码是admin、admin
[Image 1]:
还没有评论,来说两句吧...