那些年,我用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
四、安装rockmongo
http://www.runoob.com/mongodb/working-with-rockmongo.html
这个很简单,就跟安装phpmyadmin一样的。安装之后的登录密码是admin、admin
- 那些年,我用Thinkphp5集成mongoDB遇到的坑
- uWSGI + Flask + MongoDB遇到的那些坑
- Thinkphp5.0 遇到的坑
- 那些年我使用Volley遇到的坑
- 那些年,我遇到的bug
- mongodb调优那些事(四)-遇到的坑
- 普通JAVA工程集成Spring遇到的那些坑
- 环信3.0集成中遇到的那些“坑”
- 集成谷歌地图遇到的那些坑及解决办法
- 那些年遇到的那些坑
- 集成云信遇到的那些问题
- 那些年遇到的坑
- MongoDB的那些坑
- 简单说说我集成科大讯飞遇到的坑
- 易开发创始人潘俊勇:这些年我遇到的那些坑
- 那些年 Android Studio 遇到的坑
- 那些年,我们一起遇到的坑
- 那些年遇到的坑----------Android Webview
- 算法训练 Anagrams问题
- 笔试题(一) 构造回文字符串
- ext 请求等待框
- android开发:activity继承AppCompatActivity 去掉标题栏
- SOAR项目Java开发规范
- 那些年,我用Thinkphp5集成mongoDB遇到的坑
- 信号量Semaphore使用
- 网络体系结构分析(1) 整体介绍
- Linux驱动开发中常见的几个不好的习惯
- 加密算法
- SQL SERVER表值函数
- 如何判断一个数是否为2的幂次方
- sublime常用快捷键
- pandas DataFrame 索引(二)