mr-luke / searcher
Laravel 5 包,用于基于 REST URL 查询、过滤和排序 Eloquent 模型。
Requires
- php: >=7.1.3
- illuminate/database: ^5.5
- illuminate/support: ^5.5
Requires (Dev)
- fzaninotto/faker: ~1.4
- mockery/mockery: ~1.0
- orchestra/database: ^3.5
- orchestra/testbench: ^3.5
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2020-02-08 16:56:07 UTC
README
此包负责将 OData(-like) URL 查询转换为 Eloquent Builder 上的 SQL 查询。
入门
Searcher 是使用 Laravel 5.5 开发的。建议在使用之前先对其进行测试。需要 PHP >= 7.1.3。
安装
要使用 composer 安装,只需将以下内容放入您的 composer.json 文件中,并运行 composer update
{ "require": { "mr-luke/searcher": "~1.0" } }
或者使用以下命令
composer require "mr-luke/searcher"
接下来,将服务提供者添加到 app/config/app.php
Mrluke\Searcher\SearcherServiceProvider::class,
配置
您可以在配置文件中看到更多自定义选项。
您还可以发布配置文件
php artisan vendor:publish
用法
步骤 1:模型
要使用 Searcher
,您需要先设置您的 Searchable
Eloquent 模型。将以下接口添加到模型中 Mrluke\Searcher\Contracts\Searchable
并创建方法
/** * Determines rules for Searcher. * * @return array */ public static function getSearchableConfig() : array { return [ 'filter' => ['first' => 'firstName'], 'query' => ['first', 'last'], 'sort => ['age' => 'age'], ]; }
filter
- 此属性定义了允许过滤的字段,例如 URL:first=john,or+steve
query
- 此属性定义了允许查询的字段,例如 URL:q=lorem
sort
- 此属性定义了允许排序的字段,例如 URL:sort=+first,-age
['first' => 'firstName']
在此示例中,first
是公开键(URL),firstName
是 Eloquent 属性。您可以通过使用 点表示法
来更精确地指定查询应该执行的方式。
['first' => 'like.firstName']
= WHERE LIKE 语句['category' => 'in.category_id']
= WHERE IN 语句['withOutMark' => 'null.mark']
= WHERE NULL 语句['posts' => 'has.posts']
= Eloquent has() 关系查询['rate' => 'has.reviews.rate']
= Eloquent whereHas() 关系查询
您还可以使用 Mrluke\Searcher\Traits\Searchable
,它允许您从类属性而不是函数中读取配置。
/** * Searcher configuration. * * @var array */ protected static $searchableConfig = [];
步骤 2:控制器
您可以通过 Facade Mrluke\Searcher\Facades\Searcher
访问 Searcher
。您只需要以下一行代码
$collection = Searcher::setModel(User::class)->get();
setModel($model, Builder
$builder = null) : self
这是包的主要方法。执行任何操作都需要此方法。
$model - 字符串|数组
$builder - Illuminate\Database\Eloquent\Builder|null
此方法提供了三种设置 Searcher
的方式。
- 默认模型
searchableConfig
无额外的 SQL 要求。
setModel(string Model::class)
- 默认模型
searchableConfig
配置了自定义Builder
(例如:不依赖于 URL 查询的whereIn
条件)
setModel(string Model::class, Builder $builder)
- 作为第一个参数传递的自定义
searchableConfig
与模型Builder
实例。
setModel(array $searchableConfig, Builder $builder)
默认情况下,Seracher
使用 Illuminate\Http\Request::all()
作为输入数组。
setQuery(array
$inputs) : self
此方法允许您设置自己的输入数组,而不是使用默认的 Illuminate\Http\Request::all()
setOptions(array
$options) : self
此方法允许您覆盖默认的 Searcher
配置。如需查看所有可用选项,请参阅 配置文件。
getBuilder() : Builder
此方法返回针对给定输入准备好的 Builder 实例。
get() : Collection
此方法返回针对给定输入的 Illuminate\Support\Collection
。如果您的配置具有属性 auto_pagination = true
,则将根据 limit
和 offset
输入进行分页。
paginate(int
$limit = null, int
$offset = null) : mixed
此方法允许您获取模型的分页集合。如果未设置参数,则方法将自动从输入中获取它们。如果您的配置具有属性 api_mode = true
,则方法将返回 Illuminate\Support\Collection
,否则您将获得 Illuminate\Pagination\LengthAwarePaginator
。
计划
待续...