gentritabazi01/larapi-components

dev-master 2020-09-08 17:53 UTC

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 的集合。

分页

有两个参数可用:limitpage。其中 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])