ensi/laravel-query-builder-helpers

此包包含laravel-query-builder扩展

0.1.9 2024-07-31 09:17 UTC

This package is auto-updated.

Last update: 2024-08-31 09:25:19 UTC


README

Latest Version on Packagist Tests Total Downloads

laravel-query-builder-helper包是一组类,用于简化Spatie的laravel-query-builder包中可用的过滤器创建。

安装

您可以通过composer安装此包

composer require ensi/laravel-query-builder-helpers

版本兼容性

基本用法

创建过滤器

通过应用静态make方法,然后调用一系列过滤器方法来创建过滤器。

use Ensi\QueryBuilderHelpers\Filters\StringFilter;

StringFilter::make('name')->contain()->endWith()->empty();

目前可用的过滤器类如下

  • StringFilter
  • NumericFilter
  • DateFilter
  • PlugFilter(传递其他参数到另一个过滤器的占位符)
  • ExtraFilter(在“额外过滤器”部分中描述)

每种过滤器类型都有自己的后缀,该后缀被添加到传递给make方法的名称中。例如,默认情况下,过滤器empty的后缀为_empty,过滤器gt的后缀为_gt

NumericFilter::make('rank')->exact()->empty()->gt()->lt();

因此,我们将获得四个可用于搜索查询的过滤器选项。

  • rank
  • rank_empty
  • rank_gt
  • rank_lt

将过滤器传递到allowedFilters方法

要将接收到的过滤器传递到Spatie包的allowedFilters方法,需要对数组进行解构。

$this->allowedFilters([
    ...NumericFilter::make('rank')->exact()->empty()->gt()->lt(),
]);

额外过滤器

ExtraFilter类被上述类使用,但也可以单独使用。

有用的方法包括

  • nested(注册一组嵌套过滤器)
  • predefined(创建包含复杂过滤器的预定义过滤器)
  • 和其他方法
...ExtraFilter::nested('page', [
    ...InputFilter::make('title', 'page_title')->empty()->exact()->contain(),
]),

配置

在**config.php**文件中,您可以自定义应用的后缀。您还可以在那里设置搜索查询中使用的like运算符。

'suffixes' => [
    'equal' => '',
    'greater' => '_gt',
    'less' => '_lt',
    ...
],

'like_operator' => 'LIKE',

贡献

有关详细信息,请参阅CONTRIBUTING

测试

  1. composer install
  2. composer test

默认情况下,测试使用内存数据库SQLite进行。SQLite不支持某些函数,例如:json_contains。要测试这些函数,将phpunit.xml.dist复制到phpunit.xml,并在php部分中指定配置,以连接到其他数据库。在编写此类测试时,使用skip函数跳过使用默认连接的测试。

->skip(fn () => DB::getDriverName() === 'sqlite', 'db driver does not support this test');

安全漏洞

有关如何报告安全漏洞,请参阅我们的安全策略

许可

MIT许可证(MIT)。有关更多信息,请参阅许可文件