对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Laravel MongoDB入门

本指南向您展示如何将 Laravel MongoDB添加到新的 Laravel Web应用程序,连接到MongoDB Atlas上托管的MongoDB 集群,以及对数据执行写入操作。

提示

如果您更愿意使用MongoDB PHP库而不是 Laravel 连接到MongoDB ,请参阅MongoDB PHP库文档中的连接到MongoDB

Laravel 集成扩展了 Laravel Eloquent 和查询生成器语法,以便在MongoDB中存储和检索数据。

MongoDB Atlas 是完全托管的云数据库服务,旨在托管您的 MongoDB 部署。您可以按照本指南中的步骤创建您的免费(无需信用卡)MongoDB Atlas 部署。

提示

您可以通过克隆laravel-quickstart Github存储库下载完整的 Web应用程序项目。

要创建“入门”应用程序,您需要在开发环境中安装以下软件:

  • PHP

  • 终端应用程序和 Shell。对于 MacOS 用户,请使用终端或类似应用程序。对于 Windows 用户,请使用 PowerShell。

完成以下步骤,安装 Laravel 集成依赖项并将其添加到 Laravel Web应用程序。

提示

作为以下安装步骤的替代方法,您可以使用 Laravel Herd 安装MongoDB并为 Laravel MongoDB配置开发环境。有关将 Laravel Herd 与 MongoDB 结合使用的更多信息,请参阅 Herd 文档中的通过 Herd Pro 安装 MongoDB

1

Laravel MongoDB需要MongoDB PHP扩展来管理MongoDB连接和命令。要学习;了解如何安装MongoDB PHP扩展,请参阅PHP库入门指南中的安装MongoDB PHP扩展步骤。

2

确保您安装的 Laravel 版本与 Laravel 集成的版本兼容。要学习;了解兼容的版本,请参阅兼容性页面。

运行以下命令安装 Laravel:

composer global require laravel/installer

安装完成后,该命令会输出以下消息:

Using version ^<version number> for laravel/installer
3

运行以下命令,生成一个名为my-app的新 Laravel Web 应用程序:

laravel new my-app

安装完成后,该命令会输出以下消息:

INFO Application ready in [my-app]. You can
start your local development using:
➜ cd my-app
➜ php artisan serve
New to Laravel? Check out our bootcamp and documentation.
Build something amazing!
4

导航到您在上一步中创建的应用程序目录:

cd my-app

运行以下命令以添加 Laravel 应用程序加密密钥,这是加密 cookie 所需的:

php artisan key:generate
5

运行以下命令,将 Laravel MongoDB 依赖项添加到您的应用程序:

composer require mongodb/laravel-mongodb:^5.8

安装完成后,验证composer.json文件的require对象中是否包含以下行:

"mongodb/laravel-mongodb": "^5.8"

完成这些步骤后,您就有了一个安装了 Laravel 集成依赖项的新 Laravel项目。

1

完成MongoDB指南,设立新的Atlas帐户并将示例数据加载到新的免费套餐MongoDB部署。按照 Cloud Deployment 标签页中的说明在云中创建 MongoDB Atlas 部署。

2

创建数据库用户后,请将该用户的用户名和密码保存在一个安全位置,以便在后续步骤中使用。

完成这些步骤后,您就在 Atlas 上有了一个新的免费套餐 MongoDB 部署、数据库用户档案以及加载到数据库中的示例数据。

您可以通过提供连接 URI(也称为连接字符串)来连接到 MongoDB 部署,它指示驱动程序如何连接到 MongoDB 部署以及连接时的行为方式。

连接字符串包含部署的主机名或 IP 地址和端口、身份验证机制、用户档案(如果适用)以及连接选项。

要连接到未托管在Atlas上的实例或部署,请参阅服务器手册中的连接字符串

1

要检索您在上一步中创建的部署的连接字符串,登录您的Atlas帐户并导航到 Database 部分下的 Clusters 页面。单击新部署的 Connect 按钮。

Atlas 用户界面的集群部分中的连接按钮

如果您尚未配置数据库用户, MongoDB将提示您创建并配置新用户。

单击 Connect to your application 下的 Drivers 按钮,从 Driver 选择菜单中选择“PHP”,然后从 Version 选择菜单中选择与您安装的版本最匹配的版本。

确保取消选择 View full code sample 选项以仅查看连接字符串。

2

单击连接string右侧的复制图标,将其复制到剪贴板,如以下屏幕截图所示:

Atlas 用户界面中的连接字符串复制按钮
3

将此连接字符串粘贴到首选文本编辑器中的文件中,并将 <db_password> 占位符替换为数据库用户的密码。连接字符串已填充数据库用户的用户名。

将此文件保存到安全位置,以便在下一步中使用。

完成这些步骤后,您将拥有一个包含数据库用户名和密码的连接字符串。

1

运行以下 shell 命令,将.env.example文件复制到项目根目录中名为.env的文件中:

cp .env.example .env

打开.env 文件,添加或编辑以下变量和值。将<connection string> 占位符替换为“创建连接字符串”步骤中的连接字符串字符串:

DB_CONNECTION=mongodb
DB_URI="<connection string>"

例如,如果连接string为 "mongodb+srv://myUser:myPass123@mongo0.example.com/",则 DB_URI 变量将匹配以下行:

DB_URI="mongodb+srv://myUser:myPass123@mongo0.example.com/"

注意

确保 .env 文件中的这些变量在运行应用程序的shell中未定义。 shell 中的环境变量优先于.env文件中的环境变量。

2

打开config目录中的database.php文件,并将默认数据库连接设置为DB_CONNECTION环境变量,如以下行所示:

'default' => env('DB_CONNECTION'),

将以下突出显示的mongodb条目添加到同一文件的connections数组中:

'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'dsn' => env('DB_URI'),
'database' => 'sample_mflix',
],
],
// ...
3

打开bootstrap目录中的providers.php文件,并将以下条目添加到数组中:

MongoDB\Laravel\MongoDBServiceProvider::class,

提示

要学习;了解如何在 Laravel 10.x 中注册提供商,请参阅注册提供程序。

完成这些步骤后,您的 Laravel Web 应用程序已准备好连接到 MongoDB。

1

通过运行以下命令,创建一个名为Movie的模型来表示 MongoDB database 中样本moviescollection的数据以及相应的resource控制器:

php artisan make:model Movie -cr

该命令完成后,会输出以下消息:

INFO Model [app/Models/Movie.php] created successfully.
INFO Controller [app/Http/Controllers/MovieController.php]
created successfully.
2

打开app/Models目录中的Movie.php模型并进行以下编辑:

  • Illuminate\Database\Eloquent\Model导入替换为MongoDB\Laravel\Eloquent\Model

  • $connection字段中指定"mongodb"

编辑后的Movie.php文件包含以下代码:

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
class Movie extends Model
{
protected $connection = 'mongodb';
}
3

打开app/Http/Controllers目录中的MovieController.php文件。 将show()函数替换为以下代码,以检索与数据库查询匹配的结果并将其呈现在视图中:

public function show()
{
return view('browse_movies', [
'movies' => Movie::where('runtime', '<', 60)
->where('imdb.rating', '>', 8.5)
->orderBy('imdb.rating', 'desc')
->take(10)
->get()
]);
}
4

打开routes目录中的web.php文件。 为MovieController添加导入和名为browse_movies的路由,如以下代码所示:

<?php
// ...
use App\Http\Controllers\MovieController;
Route::get('/browse_movies/', [MovieController::class, 'show']);
5

从应用程序根目录运行以下命令,创建显示电影数据的视图:

php artisan make:view browse_movies

运行该命令后,会输出以下消息:

INFO View [resources/views/browse_movies.blade.php] created
successfully.

打开resources/views目录中的browse_movies.blade.php视图文件。 将内容替换为以下代码并保存更改:

<!DOCTYPE html>
<html>
<head>
<title>Browse Movies</title>
</head>
<body>
<h2>Movies</h2>
@forelse ($movies as $movie)
<p>
Title: {{ $movie->title }}<br>
Year: {{ $movie->year }}<br>
Runtime: {{ $movie->runtime }}<br>
IMDB Rating: {{ $movie->imdb['rating'] }}<br>
IMDB Votes: {{ $movie->imdb['votes'] }}<br>
Plot: {{ $movie->plot }}<br>
</p>
@empty
<p>No results</p>
@endforelse
</body>
</html>
6

您可以使用toJson()方法以 JSON 格式显示结果,而不是生成视图和编辑browse_movies.blade.php文件。

show()函数替换为以下代码以检索结果并将其作为JSON文档返回:

public function show()
{
$results = Movie::where('runtime', '<', 60)
->where('imdb.rating', '>', 8.5)
->orderBy('imdb.rating', 'desc')
->take(10)
->get();
return $results->toJson();
}
7

从应用程序根目录运行以下命令,启动 PHP 内置 Web 服务器:

php artisan serve

服务器启动后,输出以下消息:

INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the server
8

在网络浏览器中打开URL http://:127.0.0.1 8000/browse_movies。该页面显示电影列表以及每部电影的详细信息。

提示

您可以从应用程序根目录运行php artisan route:list命令来查看可用路由列表。

1

app/Http/Controllers目录中MovieController.php文件中的store()方法替换为以下代码:

public function store(Request $request)
{
$data = $request->all();
$movie = new Movie();
$movie->fill($data);
$movie->save();
}
2

通过运行以下命令生成API路由文件:

php artisan install:api

提示

如果您使用的是 Laravel 10 .x,请跳过此步骤,因为该命令生成的文件已经存在。

导入控制器并添加调用routes/api.php文件中的store()方法的 API 路由:

use App\Http\Controllers\MovieController;
// ...
Route::resource('movies', MovieController::class)->only([
'store'
]);
3

更新app/Models目录中的Movie模型以指定fill()方法填充的字段,如以下代码所示:

class Movie extends Model
{
protected $connection = 'mongodb';
protected $fillable = ['title', 'year', 'runtime',
'imdb', 'plot'];
}
4

创建一个名为movie.json的文件并插入以下数据:

{
"title": "The Laravel MongoDB Quick Start",
"year": 2024,
"runtime": 15,
"imdb": {
"rating": 9.5,
"votes": 1
},
"plot": "This movie entry was created by running through
the Laravel MongoDB Quick Start tutorial."
}

通过在 shell 中运行以下命令,将 JSON 有效负载作为POST请求发送到端点:

curl -H "Content-Type: application/json" \
--data @movie.json \
http://localhost:8000/api/movies

恭喜您完成入门指南!

完成这些步骤后,您就拥有了一个 Laravel Web应用程序,它使用 Laravel MongoDB连接到您的MongoDB 部署、对示例数据运行查询并呈现检索到的结果。

您可以通过克隆laravel-quickstart Github存储库下载Web应用程序项目。

提示

Tutorials

学习使用Laravel MongoDB构建后端服务教程,了解如何在 Laravel MongoDB应用程序中实现更多增删改查功能。

通过关注 Youtube 上的 使用 Laravel 和 MongoDB 的全栈 Instagram 克隆 教程,了解如何构建使用 Laravel MongoDB 的全堆栈应用程序。

通过以下资源了解有关 Laravel MongoDB 功能的更多信息:

  • 连接到MongoDB:学习;了解如何配置MongoDB连接。

  • 与数据交互:学习;了解如何读取和写入MongoDB数据。

  • 对数据进行建模:使用 Eloquent 模型类来处理MongoDB数据。

  • 查询构建器:使用查询构建器指定 MongoDB 查询和聚合。

注意

如果您在此页面上运行问题,请使用此页面右侧或右下角的 Rate this page标签页提交反馈。

您可以使用MongoDB Stack Overflow标签 或MongoDB Reddit Community 寻求一般问题的支持。