在PHP8内,用Jenssegers MongoDB扩展来实现Laravel与MongoDB的集成
在现代 web 开发中,MongoDB 作为一种流行的 NoSQL 数据库,因其灵活的文档结构和高性能而受到许多开发者的青睐。Laravel,作为一个优雅的 PHP Web 框架,提供了丰富的功能和优雅的代码风格。本文将指导你如何在 Laravel 项目中集成 MongoDB.
在宝塔面板中安装PHP 8以及MongoDB扩展(php-mongodb)的步骤如下:
安装PHP 8
-
登录宝塔面板:
- 使用你的账号和密码登录宝塔面板。
-
访问软件商店:
- 在宝塔面板的左侧菜单中找到“软件商店”。
-
搜索并安装PHP:
- 在软件商店中搜索“PHP”,找到PHP 8.x版本。
- 点击“安装”,选择“极速安装”或“自定义安装”。
- 如果选择自定义安装,确保选择PHP 8.x版本,并根据需要勾选其他组件。
-
安装完成后重启服务:
- 安装完成后,宝塔面板会提示你重启服务,点击“立即重启”以应用更改。
安装MongoDB PHP扩展(php-mongodb)
- 安装MongoDB:
- 如果还没有安装MongoDB,可以在软件商店中搜索并安装MongoDB。
- 安装PHP扩展:
- 在宝塔面板的左侧菜单中找到“软件商店”,找到"已安装"的php 8.0.26,然后选择PHP“安装扩展”。
- 搜索“mongodb”,找到“php-mongodb”扩展。
- 点击“安装”,宝塔面板会自动下载并安装该扩展。
- 重启PHP服务:
- 安装完成后,需要重启PHP服务以使扩展生效。可以在“软件商店”中的“运行环境”下找到PHP,点击“设置”,然后选择“重启”。
- 验证安装:
- 重启服务后,可以通过创建一个简单的PHP脚本来验证
php-mongodb
扩展是否已正确安装和加载。例如,创建一个名为info.php
的文件,内容如下:<?php phpinfo(); ?>
- 访问这个文件,查找“mongodb”相关的信息,确认扩展已加载。
- 重启服务后,可以通过创建一个简单的PHP脚本来验证
安装无效的办法
在php8.0,我遇到mongodb扩展挂不上,花了半天时间检查也无效。在php调用时失败。经过长时间的修复,我准备放弃php8.0,安装了php7.2版本。然后使用php -m | grep mongo是有结果的。
我原计划准备将网站切换到php7.2环境,无意中测试在php8.0环境是否有效。竟然发现php8.0运行php - m | grep mongo也有结果了。这是奇遇。
在 Laravel 中加入 MongoDB :
1. 安装 MongoDB PHP 扩展
先检查
php -v
php -m | grep mongo #查看是否成功,不成功就看第**
2. 安装 Laravel MongoDB 包
接下来,你需要在 Laravel 项目中安装 MongoDB 支持。推荐使用的包是 jenssegers/mongodb
。通过 Composer 安装:
composer require jenssegers/mongodb
3. 配置 Laravel 项目使用 MongoDB
在.env :
MONGODB_DSN=mongodb://esg:passwd@127.0.0.1:27317/esg?authSource=esg
在 config/database.php
文件中配置 MongoDB 数据库连接信息:
'mongodb' => [
'driver' => 'mongodb',
// 'host' => env('MONGODB_HOST', '127.0.0.1'),
// 'port' => env('MONGODB_POST', '27317'),
// 'database' => env('MONGODB_DB', 'esg'),
// 'username' => env('MONGODB_USER', 'esg'),
// 'password' => env('MONGODB_PASSWORD', ''),
'dsn' => env('MONGODB_DSN','') #启用的是dsn,上面的失败
]
4. 注册服务提供者
在 config/app.php
文件中注册 MongoDB 服务提供者:
'providers' => [
// ...
Jenssegers\Mongodb\MongodbServiceProvider::class,
],
5. 使用 MongoDB
查询构造器
你可以使用 Laravel 的查询构造器来操作 MongoDB。例如,创建一个 UserController
控制器:
php artisan make:controller UserController
在控制器中使用 MongoDB:
use DB;
class UserController extends Controller
{
public function index()
{
DB::connection('mongodb')->collection('users')->insert([
'name' => 'tom',
'age' => 18,
]);
$res = DB::connection('mongodb')->collection('users')->all();
dd($res);
}
}
Eloquent 模型
在 config/app.php
中配置 MongoDB 的 Eloquent 类别名:
'Moloquent' => 'Jenssegers\Mongodb\Eloquent\Model',
创建一个模型 User.php
:
php artisan make:model User
在模型中指定 MongoDB 连接和集合:
<?php
namespace App;
use Moloquent;
class User extends Moloquent
{
protected $connection = 'mongodb';
protected $collection = 'users';
protected $primaryKey = '_id';
protected $fillable = ['name', 'age'];
}
在控制器中使用模型:
<?php
namespace App\Http\Controllers;
use App\User;
class UserController extends Controller
{
public function index()
{
User::create([
'name' => 'tom',
'age' => 18,
]);
}
}
通过上述步骤,你可以在 Laravel 项目中集成 MongoDB,并进行基本的 CRUD 操作。同时,了解如何使用 CDN 加速静态资源的加载,可以进一步提升你的 web 应用性能。希望这篇文章能帮助你在 Laravel 项目中更好地利用 MongoDB 和 CDN。