milito/query-filter

这是一个用于每个模型使用查询筛选器的包。此包完全是个人使用。但是,如果您迫切想要使用它,可以通过readme文件轻松使用此包。这很简单,很业余 :)

v1.1.1 2023-08-27 22:59 UTC

This package is auto-updated.

Last update: 2024-09-28 01:44:38 UTC


README

Latest Stable Version Total Downloads License

Laravel 查询筛选器包

一个简单的包,用于将查询筛选器文件添加到项目中。

简介

使用以下命令使用composer安装此包

composer require milito/query-filter

使用方法

要创建新的查询筛选器,您可以在终端运行此命令

php artisan make:query-filter {your-query-filter-name}

示例

php artisan make:query-filter ProductsFilter

此命令将在app/Filters/路径下创建一个ProductsFilter.php文件。

此ProductsFilter类继承自QueryFilter类,用于控制器函数。因此,此类的构造函数需要一个request对象。

但是,如果您想创建一个简单的array输入的筛选器类,您需要在类名后使用-a|--array选项。

php artisan make:query-filter ProductsFilter -a

此ProductsFilter类继承自ArrayQueryFilter

命名空间

您可以将命名空间添加到您的文件中

php artisan make:query-filter Products/ProductsFilter

这将创建一个位于app/Filters目录内的Products目录。

如何使用!

文件生成后,您应该添加您的函数。
示例

<?php

namespace App\Filters;

use Milito\QueryFilter;

class ProductsFilter extends QueryFilter
{
   public function name($name = null)
   {
      if (!$name)
        return $this->builder;
      return $this->builder->where('name' , 'LIKE' , $name);
   }
}

提示:如果您的函数参数没有默认值,每次使用时都需要填写值。

然后您需要将QueryFilterScope添加到您的模型中。
示例

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Milito\QueryFilterScope;

class Product extends Model{
    use QueryFilterScope;
}

现在您可以在控制器中使用它

<?php

namespace App\Controllers;

use App\Filters\ProductsFilter;
use App\Models\Product;
class ProductsController extends Controller
{
    public function index(ProductsFilter $filter)
    {
       $products = Product::filter($filter)->paginate(20);

       return $products;
    }
}

<?php

namespace App\Controllers;

use App\Filters\ProductsFilter;
use App\Models\Product;
use Illuminate\Http\Request;

class ProductsController extends Controller
{
    public function index(Request $request)
    {
       $filter = new ProductsFilter($request);

       $products = Product::filter($filter)->paginate(20);

       return $products;
    }
}

如果您需要请求,可以使用request()函数从筛选器中获取请求。
示例

//...

  public function index(ProductsFilter $filter)
  {
     $request = $filter->request();

     $products = Product::filter($filter)->paginate($request->per_page??20);

     return $products;
  }

//...

要使用继承自ArrayQueryFilter的类

//...

  public function index(Request $request)
  {
     $filter = new ProductsFilter(["name" => $request->query("your_name_field")]);

     $products = Product::filter($filter)->paginate(20);

     return $products;
  }

//...

许可

Milito 查询筛选器包是一个开源软件包,遵循MIT许可证