对于 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.11

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

"mongodb/laravel-mongodb": "^5.11"

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

1

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

2

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

完成这些步骤后,您就在Atlas上有了一个新的免费集群、数据库用户凭证以及加载到数据库中的示例数据。

您可以通过提供连接 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 功能的更多信息:

注意

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

您可以使用MongoDB Stack Overflow标签或MongoDB Reddit 社区找到一般问题的支持。