2021-02-07 18:25:17
围观(6869)
在使用 MongoDB 前,需要开启 PHP 的 MongoDB 扩展。
具体如何开启:https://www.php.net/manual/en/mongodb.installation.php
本文使用 jenssegers/mongodb https://github.com/jenssegers/laravel-mongodb 的包,进行使用 MongoDB。
使用的是 Laravel 7.* 使用命令安装(如果其他版本的 Laravel 可以查阅上面的 jenssegers/mongodb 包文档):
composer require jenssegers/mongodb="3.7.x"
在 config/database.php 的数组 connections 添加配置:
'mongodb' => [ 'driver' => 'mongodb', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', 27017), 'database' => env('DB_DATABASE', 'homestead'), 'username' => env('DB_USERNAME', 'homestead'), 'password' => env('DB_PASSWORD', 'secret'), 'options' => [ 'database' => env('DB_AUTHENTICATION_DATABASE', 'admin'), // required with Mongo 3+ ], ],
在 .ENV 配置:
DB_CONNECTION=mongodb DB_HOST=127.0.0.1 DB_PORT=27017 DB_DATABASE=collection DB_USERNAME= DB_PASSWORD=
这里的数据库 DB_DATABASE 其实是 MongoDB 的集合。
在 app 下创建一个 MongoDB 目录(存放 MongoDB 的 Model 可以取其他名称).
在 app/MongoDB 创建一个 Content 类。
Content 类继承 Jenssegers\Mongodb\Eloquent\Model 例如:
<?php namespace App\MongoDB; use Jenssegers\Mongodb\Eloquent\Model; class Content extends Model { protected $collection = 'content'; // 这里可以不定义 也可以定义 protected $fillable = [ 'name', 'content', 'created_at', 'updated_at' ]; }
相关的可以查看 jenssegers/mongodb 的文档。
最后进行 CRUD 测试,创建一个 IndexController 控制器,并在路由调用 test 方法(本文不描述如何创建控制器和使用路由 这些都是基础知识)。
插入数据:
public function test() { Content::create([ 'title' => 'title', 'content' => 'content' ]); }
批量插入数据:
Content::insert([ [ 'name' => 'name1', 'content' => 'content1', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ], [ 'name' => 'name2', 'content' => 'content2', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ] ]);
查询数据:
根据 _ID 主键查询:
public function test() { $row = Content::find('601f540f573e0000490017eb'); dd($row); }
这个包的实现,其实是先继承了 Eloquent 然后重写一些方法,所以在使用上和 Laravel 使用 MySQL 基本上一致。就不继续写修改和删除的方法了。
同时使用 MySQL 和 MongoDB
MySQL 是关系型数据库,MongoDB 其实是 NoSQL 数据库,在某些应用场景 MongoDB 更加适用性能也更好,所以同时使用这两种数据库的情况并不少见。
先是修改.ENV 配置:
DB_CONNECTION=mongodb # 下面的是 MySQL 的配置 DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database DB_USERNAME=root DB_PASSWORD=root # 下面的是 MongoDB 的配置 MONGO_DB_HOST=127.0.0.1 MONGO_DB_PORT=27017 MONGO_DB_DATABASE=collection MONGO_DB_USERNAME= MONGO_DB_PASSWORD=
修改数据库驱动配置 config/database.php 的 connections 数组的 mongodb:
'mongodb' => [ 'driver' => 'mongodb', 'host' => env('MONGO_DB_HOST', '127.0.0.1'), 'port' => env('MONGO_DB_PORT', 27017), 'database' => env('MONGO_DB_DATABASE', 'homestead'), 'username' => env('MONGO_DB_USERNAME', 'homestead'), 'password' => env('MONGO_DB_PASSWORD', 'secret'), 'options' => [ 'database' => env('DB_AUTHENTICATION_DATABASE', 'admin'), // required with Mongo 3+ ], ],
在使用 MongoDB 时可以继续使用上文写的,不会有影响。
在使用 MySQL 时,需要在对应的 Model 上加入 $connection 属性并指定值为 MySQL,例如:
<?php namespace App\Model; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $connection = 'mysql'; }
此时可以使用不同的 Model 访问 MySQL 或 MongoDB 数据库。
本文地址 : bubaijun.com/page.php?id=230
版权声明 : 未经允许禁止转载!
上一篇文章: PHP根据数组时间元素进行排序
下一篇文章: PHP时间日期处理类开始时间及结束时间