milito / query-filter
这是一个用于每个模型使用查询筛选器的包。此包完全是个人使用。但是,如果您迫切想要使用它,可以通过readme文件轻松使用此包。这很简单,很业余 :)
v1.1.1
2023-08-27 22:59 UTC
Requires
- php: ^8.0|^8.1
This package is auto-updated.
Last update: 2024-09-28 01:44:38 UTC
README
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许可证。