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

水深无声 2022-06-18 10:38 259阅读 0赞

据说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数据,成功了。代码如下:

  1. $m = new \MongoClient();
  2. $db = $m->runoob;
  3. $collection = $db->col;
  4. //dump($collection);
  5. //插入文档
  6. $document = array(
  7. "title" => "MongoDB",
  8. "description" => "database",
  9. "likes" => 100,
  10. "url" => "http://www.runoob.com/mongodb/",
  11. "by" => "菜鸟教程",
  12. "likes" => 50
  13. );
  14. //dump($collection->insert($document));
  15. //查找文档
  16. $list = $collection->find();
  17. foreach($list as $v) {
  18. dump($v);
  19. }

但是,问题来了,我不能在项目中用原生的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][]

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

  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]:

发表评论

表情:
评论列表 (有 0 条评论,259人围观)

还没有评论,来说两句吧...

相关阅读