那些年,我用Thinkphp5集成mongoDB遇到的坑

来源:互联网 发布:快递公司用什么软件 编辑:程序博客网 时间:2024/05/21 22:44

据说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



接着,安装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。我下载的是最新的。


下载完之后,将php_mongo.dll放到php的ext目录下,然后在php.ini中加入extension=php_mongo.dll,重启服务器(我用的是phpstudy)

用phpinfo查看,mongo扩展安装成功了。


然后,我在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中运行上面的命令,完全没有反应,过了很久,才报错。错误如下:


没办法,去网上找了很多资料,参照改了很多,都没有用。终于,看到了下面的一篇文章。

http://www.thinkphp.cn/topic/45113.html。里面说是镜像地址错了的原因。


很有可能就是这个原因,于是参考文章所说,执行命令

composer config repo.packagist composer https://packagist.phpcomposer.com

然后再执行命令composer require thinkphp/think-mongo。

可以了,在vendor目录下多了两个目录



下面,开始集成mongoDB。

1)修改database.php


2)在controller中使用DB库读取mongo



哇哈哈哈哈,成功了成功了!

个屁!!!!!

只要配置了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


安装完之后,可以运行了。


四、安装rockmongo

http://www.runoob.com/mongodb/working-with-rockmongo.html

这个很简单,就跟安装phpmyadmin一样的。安装之后的登录密码是admin、admin



0 0
原创粉丝点击