ferfabricio/rest-get-filters

使用 Eloquent scopes 的 Laravel 应用程序的过滤器

1.0.2 2022-09-06 20:29 UTC

This package is auto-updated.

Last update: 2024-09-07 01:18:06 UTC


README

Build Status Quality Gate Status Coverage Vulnerabilities

rest-get-filters

用于 Laravel 项目的 GET 请求的过滤器

动机

在 GET 请求中创建过滤器有几种方法,包括对这一主题的另一种方法,但其中许多方法都需要开发者为简单的事情做大量工作。

此包的主要目标是做些简单且效果良好的事情。

安装

composer require ferfabricio/rest-get-filters

用法

设置此包的步骤

  1. 添加 Filterable 特性;
  2. 定义过滤器;
  3. 在查询中应用过滤器;

添加 Filterable 特性

例如模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    protected $fillable = [
        'name'
    ];
}

添加特性 FerFabricio\RestGetFilters\FilterFactory\Filterable

<?php

namespace App;

use FerFabricio\RestGetFilters\FilterFactory\Filterable;
use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    use Filterable;
  
    protected $fillable = [
        'name'
    ];
}

定义过滤器

您可以通过添加受保护的参数 $filters 作为数组来定义过滤器,其中 keys 是列名,而 value 是要应用的过滤器的类型。

每个过滤器都有一个名为 IDENTIFIER 的常量,需要在 $filters 定义中使用。

<?php

namespace App;

use FerFabricio\RestGetFilters\Traits\Filterable;
use FerFabricio\RestGetFilters\Filters\Date as DateFilter;
use FerFabricio\RestGetFilters\Filters\Like as LikeFilter;
use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
  use Filterable;
  
  protected $fillable = [
      'name'
  ];
  
  protected $filters = [
      'created_at' => DateFilter::IDENTIFIER,
      'name' => LikeFilter::IDENTIFIER
  ];
}

在查询中应用过滤器

Filterable 特性向模型添加了一个作用域,它将配置在 $filters 变量上的所有过滤器应用,要应用此作用域,您需要调用 filters 方法;

<?php

namespace App\Http\Controllers;

use App\Example;
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class ExampleController extends Controller
{
    /**
     * List all Examples with filters
     *
     * @param Request $request
     * @return JsonResponse
     */
    public function index(Request $request) : JsonResponse
    {
        // You need validate the input values
        $filters = $request->get('filters', []);
        $examples = Example::filters($filters)->get();
        return response()->json($examples);
    }
}

可用过滤器