geekyants / laravel-usedb
通用CRUD操作
Requires
- php: >=5.3.0
Requires (Dev)
- orchestra/testbench: ^3.8
This package is auto-updated.
Last update: 2024-09-18 17:03:46 UTC
README
1) 介绍
Laravel-usedb是一个为Laravel应用程序提供的通用CRUD composer包,它消除了为Laravel应用程序中的每个模型编写API的需求。
2) 动机
这个想法是为了简化那些需要为不同项目创建类似类型的CRUD API的开发者的工作。使用此包,您可以对项目中任何模型执行CRUD操作。
3) 特点
- URL:所有请求都汇总在同一个URL上,即 <APP_URL>/usedb。
- 通用控制器:任何模型的CRUD操作都由同一个控制器处理。
4)安装
#COMPOSER
composer require geekyants/laravel-usedb
安装后,运行以下命令将包的配置文件移动到您的项目配置中。
php artisan vendor:publish --tag=config
5) 使用方法
所有API请求都接收在 <APP_URL>/usedb,方法类型始终为POST。
在发送请求时,以下字段是必需的
-
collection:它包含要执行操作的模型名称。
-
operation:操作的名称。
-
payload:它包含基于操作类型的不同值。
payload中的必需字段
- 创建数据
- findOne where
- findMany skip, take
- 更新数据,where
- 删除 where
添加中间件
usedb.php配置文件的中间件属性包含与我们的路由一起包含的中间件的条目。如果您想为路由分配中间件,请在中间件中添加条目。默认情况下,已添加usedb和model-usedb中间件到配置中。
设置模型类路径
usedb.php中的modelPath属性包含从该路径加载Model类的目录。默认情况下,其值被分配为 "App\Models\",这是Laravel的默认模型目录。
授权
授权可以通过两种方式进行:Gates和Policies。创建它们后,您需要在usedb配置文件中提及它们。
- 门:要将门映射到特定模型的特定操作,您必须在权限字段的gates属性中的数组中定义它。语法
'gates' => [ 'modelName' => [ 'update' => [], 'delete' => [], 'create' => [], 'findOne' => [], 'findMany' => [] ] ]
modelName表示您想要应用门的模型的名称。 update
、delete
、create
、findOne
和 findMany
将映射到要应用于相应操作的门的数组。
- 策略:要将策略应用于特定模型的一定操作,您必须在权限字段的policies属性中的数组中定义它。相同的语法
'policies' => [ 'update' => '', 'delete' => '', 'create' => '', 'findOne' => '', 'findMany' => '' ] ]
modelName表示您想要应用策略的模型的名称。 update
、delete
、create
、findOne
和 findMany
将映射到要应用于相应操作的策略。
关联
当您想返回与关联模型的对象时,您必须在JSON提供的payload字段的include属性中指定从父对象访问子对象属性。
例如,我们有一个Blogs和comments之间的OneToMany关系。现在我们想检索带有其关联评论的博客,其JSON将如下所示
{ "collection":"Blog", "operation":"findOne", "payload": { "where":{ "id": 139 }, "include":{ "comments":{} } } }
6) 示例
假设我们有一个Post模型,它只有一个属性:标题。以下是对Post模型的CRUD示例
- 创建
{ "collection":"Post", "operation":"create", "payload": { "data": { "caption": "Caption of the post" } } }
- 查找一个
{ "collection":"Post", "operation":"findOne", "payload": { "where": { "id": 1 } } }
- 更新
{ "collection":"Post", "operation":"update", "payload": { "data": { "caption": "changed caption" }, "where": { "id" : 10 } } }
- 删除
{ "collection":"Post", "operation":"delete", "payload": { "where": { "id" : 3 } } }
- 查找多个
{ "collection":"Post", "operation":"findMany", "payload": { "where": { "caption": "hello" }, "skip": 1, "take": 5 } }