mr-luke/searcher

此包已被废弃,不再维护。没有建议的替代包。

Laravel 5 包,用于基于 REST URL 查询、过滤和排序 Eloquent 模型。

v1.0.0 2018-10-16 21:04 UTC

This package is auto-updated.

Last update: 2020-02-08 16:56:07 UTC


README

Latest Stable Version Total Downloads License

此包负责将 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 的方式。

  1. 默认模型 searchableConfig 无额外的 SQL 要求。
setModel(string Model::class)
  1. 默认模型 searchableConfig 配置了自定义 Builder(例如:不依赖于 URL 查询的 whereIn 条件)
setModel(string Model::class, Builder $builder)
  1. 作为第一个参数传递的自定义 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,则将根据 limitoffset 输入进行分页。

paginate(int $limit = null, int $offset = null) : mixed

此方法允许您获取模型的分页集合。如果未设置参数,则方法将自动从输入中获取它们。如果您的配置具有属性 api_mode = true,则方法将返回 Illuminate\Support\Collection,否则您将获得 Illuminate\Pagination\LengthAwarePaginator

计划

待续...