gentritabazi01 / larapi-components
Larapi 组件
Requires
- illuminate/support: ~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0
This package is auto-updated.
Last update: 2020-09-08 17:53:24 UTC
README
介绍
Larapi Components 让您能够在 Laravel 中进行现代 API 开发。
Larapi Components 包含以下内容...
- 现代的 API 异常处理器。
- 一个控制器类,可以响应,解析端点数据。
- 一个用于从数据库请求数据实体的仓库类。
- 排序。
- 过滤。
- 预加载。
- 分页。
检查如何在您的应用中使用
使用一条命令创建控制器、服务、仓库和模型。
php artisan component:make {parent} {name}
预加载
简单的预加载
/books?includes[]=author
将返回一个包含 5 个 Book 的集合,这些 Book 预加载了 Author。
IDs 模式
/books?includes[]=author-ids
将返回一个包含 Book 的集合,这些 Book 预加载了它们 Author 的 ID。
侧加载模式
/books?includes[]=author-sideload
将返回一个包含 Book 的集合,以及在一个预加载的根作用域中的它们 Author 的集合。
分页
有两个参数可用:limit 和 page。其中 limit 将确定每页的记录数,而 page 将确定当前页。
/books?limit=10&page=3
将返回编号为 30-40 的书籍。
排序
应该定义为排序规则的数组。它们将按照定义的顺序应用。
排序规则
| 属性 | 值类型 | 描述 | 
|---|---|---|
| key | 字符串 | 要排序的模型属性 | 
| direction | ASC 或 DESC | 按哪个方向排序属性 | 
示例
{
	"sort": [
		{
			"key": "id",
			"direction": "DESC"
		}
	]
}
将导致书籍按 id 降序排序。
过滤
在使用过滤器之前,请确保您已在指定的模型中声明了 $whiteListFilter。示例
/**
 * Columns that can be filtered.
 *
 * @var array
 */
public static $whiteListFilter = ['first_name', 'posts.body'];
过滤器应定义为过滤器组的数组。
过滤器组
| 属性 | 值类型 | 描述 | 
|---|---|---|
| or | 布尔值 | 此组中的过滤器应按逻辑 OR 或 AND 运算符分组吗 | 
| filters | 数组 | 过滤器数组(请参阅以下语法) | 
过滤器
| 属性 | 值类型 | 描述 | 
|---|---|---|
| column | 字符串 | 要过滤的模型属性(也可以是自定义过滤器) | 
| value | 混合 | 要搜索的值 | 
| operator | 字符串 | 要使用的过滤器运算符(请参阅以下不同类型) | 
| not | 布尔值 | 否定过滤器 | 
运算符
| 类型 | 描述 | 
|---|---|
| ct | 字符串包含 | 
| sw | 以...开头 | 
| ew | 以...结尾 | 
| eq | 等于 | 
| gt | 大于 | 
| gte | 大于或等于 | 
| lte | 小于或等于 | 
| lt | 小于 | 
| 在 | 数组中 | 
| bt | 之间 | 
示例过滤器
以下是如何过滤所有名字为"Gentrit"的用户的方法。
{
	"filter_groups": [
		{
			"filters": [
				{
					"column": "first_name",
					"operator": "eq",
					"value": "Gentrit"
				}
			]
		}
	]
}
您可以在仓库中创建自定义过滤器,如下所示
public function filterAuthorName($queryBuilder, $method, $operator, $value) { switch ($method) { case 'where': $queryBuilder->whereHas('author', function ($q) use ($operator, $value) { $q->where(DB::raw("CONCAT(`first_name`, ' ', `last_name`)"), $operator, $value); }); break; case 'orWhere': $queryBuilder->orWhereHas('author', function ($q) use ($operator, $value) { $q->where(DB::raw("CONCAT(`first_name`, ' ', `last_name`)"), $operator, $value); }); break; }
自定义过滤器函数
| 参数 | 描述 | 
|---|---|
| $queryBuilder | Eloquent 查询构建器。 | 
| $method | 要使用的 where 方法 ( where,orWhere,whereIn,orWhereIn等)。 | 
| $operator | 可用于非-in wheres 的运算符 ( !=,=,>等)。 | 
| $value | 过滤器值。 | 
仓库函数
以下示例将使用一个名为 User 的假设 Eloquent 模型。
get (array $options = [])
获取所有 User 行
getById ($id, array $options = [])
通过主键获取一个 User
getRecent (array $options = [])
按 created_at 降序获取 User 行
getRecentWhere (string $column, mixed $value, array $options = [])
获取 User 行,其中 $column=$value,并按 created_at 降序排列
getWhere (string $column, mixed $value, array $options = [])
获取 User 行,其中 $column=$value
getWhereArray (array $clauses, array $options = [])
通过多个 where 子句获取 User 行 ([$column1 => $value1, $column2 => $value2])
getWhereIn (string $column, array $values, array $options = [])
获取 User 行,其中 $column 可以是 $values 中给出的任何值
getLatest (array $options = [])
获取最新的 User
getLatestWhere (string $column, mixed $value, array $options = [])
获取 $column=$value 的最新 User
delete ($id)
通过主键删除 User 行
deleteWhere ($column, $value)
删除 User 行,其中 $column=$value
deleteWhereArray (array $clauses)
通过多个 where 子句删除 User 行 ([$column1 => $value1, $column2 => $value2])