2021-02-07 18:25:17
围观(9012)
在使用 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时间日期处理类开始时间及结束时间