这篇文章主要为大家展示了“Laravel框架中如何使用MongoDB数据库”
一、先确定好自己使用的哪个版本的 Laravel 框架,再决定 composer 哪一个的 MongoDB,我使用的是 Laravel 8 所以我 composer 了 3.8 的MongoDb(具体看官网解释)
二、使用composer在laravel框架中引入mongodb(记得加版本号)
//两个任意一个即可
composer require jenssegers/mongodb ^3.8 -vvv
composer require jenssegers/mongodb:3.8 --ignore-platform-reqs
三、这个时候可能会报错,所以要做以下操作
- php先安装mongodb扩展(本地需要先安装mongodb)
-
在这里根据你的 PHP 版本进行选择,我的是 7.3.4 的,所以我选择 1.6.0 的
-
将下载到的压缩包内的 php_mongodb.dll 文件复制到 php7.3.4 下的ext文件夹内(如果里面原来就选择替换)
-
在php.ini中写入extension=mongodb
-
执行完再用composer 命令下载注册服务
四、在app/config/app.php文件中引入
'providers' => [
Jenssegers\Mongodb\MongodbServiceProvider::class,
]
'aliases' => [
'Mongo' => Jenssegers\Mongodb\MongodbServiceProvider::class,
]
在 .env 文件中加入
MONGODB_HOST=127.0.0.1
MONGODB_POST=27017
MONGODB_DB=phone
DB_USERNAME=
DB_PASSWORD=
五、修改数据库配置文件 config/database.php 中
'mongodb' => [
'driver' => 'mongodb',
'host' => env('MONGODB_HOST', '127.0.0.1'),
'port' => env('MONGODB_POST', '27017'),
'database' => env('MONGODB_DB', 'phone'),
'username' => env('MONGODB_USER', ''),
'password' => env('MONGODB_PASSWORD', ''),
],
六、扩展基本模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Jenssegers\Mongodb\Eloquent\SoftDeletes;
use Jenssegers\Mongodb\Eloquent\Model as Moloquent;
class Test extends Moloquent
{
use HasFactory;
use SoftDeletes;
//同样,您可以定义一个属性来覆盖在使用模型时应使用的数据库连接的名称。connection
protected $connection = 'mongodb';
//就像普通模型一样,MongoDB 模型类将根据模型名称知道要使用哪个集合。对于 ,将使用集合。Bookbooks 若要更改集合,请传递以下属性:$collection
protected $collection = 'test'; //文档名
//MongoDB文档使用存储在属性中的唯一ID自动存储。如果希望使用自己的 ID,请替换该属性并将其设置为您自己的主键属性名称。_id$primaryKey
protected $primaryKey = '_id'; //主键id
protected $guarded=[]; //黑名单
}
软删除
软删除模型时,实际上不会从数据库中删除该模型。相反,会在记录上设置deleted_at时间戳。要为模型启用软删除,请将 Trait 应用于模型:Jenssegers\Mongodb\Eloquent\SoftDeletes
use Jenssegers\Mongodb\Eloquent\SoftDeletes;
class Test extends Moloquent
{
use SoftDeletes;
protected $dates = ['deleted_at'];
}
有关更多信息,请查看有关软删除的Laravel文档。
日期
Eloquent允许您使用Carbon或DateTime对象而不是MongoDate对象。在内部,这些日期在保存到数据库时将转换为 MongoDate 对象。
use Jenssegers\Mongodb\Eloquent\Model as Moloquent;
class User extends Moloquent
{
protected $dates = ['birthday'];
}
这允许您执行如下查询:
$users = User::where(
'birthday', '>',
new DateTime('-18 years')
)->get();
七、基本用法(基本用法和laravel的差不多没有太大的差别)
检索所有模型
$users = User::all();
更多请查看:GitHub - jenssegers/laravel-mongodb:基于MongoDB的Eloquent模型和Laravel的查询构建器(Moloquent)