使

使用 Laravel 服务存储库模式实现 CRUD

2025-06-07

使用 Laravel 服务存储库模式实现 CRUD

给我买杯咖啡

为什么采用 Laravel 服务和存储库模式?

是的,Laravel 确实有很多方法可以解释 CRUD 功能。但我个人建议使用服务存储库设计模式,因为它简洁且可持续。存储库和服务的概念可以确保你编写可重用的代码,并有助于保持控制器尽可能简单,从而提高可读性。

存储库通常是模型的通用包装器,也是您在数据库中编写不同查询的地方。另一方面,服务是处理所有应用程序逻辑的层。根据经验,将逻辑与模型的包装器分离非常有益,尤其是在团队合作或大型项目中。

为了演示存储库和服务,我们将构建一个 CRUD 应用程序。
我假设您已经在本地计算机上安装了 Laravel 项目。如果没有,您可以阅读我之前关于安装 Laravel 项目的文章:https://dev.to/jsafe00/set-up-laravel-project-in-a-virtual-machine-with-laravel-homestead-3d4a

为了在本教程中强调服务存储库模式,我将仅演示后端。您可以使用 Postman 来执行。
您可以在此处下载并安装 Postman:https://www.postman.com/downloads/

首先,让我们通过执行以下命令来设置模型、控制器和迁移:

php artisan make:model Post -mcr

-m, --migration 为模型创建一个新的迁移文件。
-c, --controller 为模型创建一个新的控制器。
-r, --resource 指示生成的控制器是否应该是资源控制器

替代文本

路线

替代文本

模型
请确保我们的属性是可填充的。请按如下所示更新 Post 模型。

替代文本

迁移
然后,像下面这样更新迁移后,然后执行

php artisan 迁移

替代文本

Laravel
没有 Repository 命令。你必须手动操作。只需创建一个 Repositories 文件夹,然后添加 PostRepository 文件并添加以下代码即可。

替代文本

我们在类的构造函数中调用 Post 模型。

服务
和 Repository 类似,Laravel 没有服务命令。创建一个 Services 文件夹,添加 PostService 文件,并添加如下代码。

替代文本

我们将 PostRepository 依赖项注入到 PostService 类的构造函数中。

现在我们已经完成了存储库服务的设置。让我们继续创建 CRUD。

创造

PostController -> PostService -> PostRepository

https://dev-to-uploads.s3.amazonaws.com/i/7hry719tcwbt0l0zxs4p.png
替代文本

$this->postService->savePostData($data) – 这部分调用帖子服务中的 savePostData 函数。

在邮寄服务中,我们会验证数据。如果没有错误,

$this->postRepository->save($data); - 我们调用帖子存储库中的保存函数将数据保存在数据库中。

替代文本
替代文本

如果出现错误,例如我们没有输入标题,那么在 postman 中执行时就会显示该错误。

替代文本

获取所有数据

https://dev-to-uploads.s3.amazonaws.com/i/zdpkcz7d7pl4kah4pvli.png
替代文本
替代文本
替代文本

获取ID

https://dev-to-uploads.s3.amazonaws.com/i/old8umw7apwjkvkwqb58.png
替代文本
替代文本

更新

https://dev-to-uploads.s3.amazonaws.com/i/uddzrcqmolhupsssrk3c.png
替代文本
替代文本
替代文本

删除

https://dev-to-uploads.s3.amazonaws.com/i/izq5dwwy2n3fy3mmy4zk.png
替代文本
替代文本
替代文本

我希望你只需看一下这些截图就能看出其中的模式,然后就能轻松理解为什么 Laravel 服务存储库模式简洁且可持续。你可以从以下位置克隆这个 CRUD 示例:https://github.com/jsafe00/laravel-service-repository

我已经在https://josafebalili.vercel.app/laravel-service-repository-interface上创建了一个关于此模式的接口实现教程

或者你可以查看我使用 Laravel 8 和 Php 8 实现的存储库模式的 CRUD 实现https://github.com/jsafe00/her-running-medals-api

我为此创建了一个简单的包。你可以查看一下。

https://github.com/jsafe00/laravel-src

万物皆有规律,你只需要留意它。俗话说,万物皆有美,但并非每个人都能看到。

愿我们都能发现一切的美。感恩之人,眼里有美。

替代文本

文章来源:https://dev.to/safventure11000/implement-crud-with-laravel-service-repository-pattern-1dkl
PREV
JavaScript——深入了解“this”关键字
NEXT
使用 MERN Stack 的社交媒体应用程序创建 Node.js Rest API 设计 React 组件创建 MERN Stack 社交媒体应用程序使用 Socket.io 的实时聊天应用程序