stepovenko / eloquent-filter-sort-pagination
用于Eloquent中的过滤和排序
1.0.9
2022-03-25 08:14 UTC
Requires
- php: >=7.2 || ^8.0
- illuminate/config: ~6.0|~7.0|~8.0|~9.0
- illuminate/console: ~6.0|~7.0|~8.0|~9.0
- illuminate/database: ~6.0|~7.0|~8.0|~9.0
- illuminate/filesystem: ~6.0|~7.0|~8.0|~9.0
- illuminate/pagination: ~6.0|~7.0|~8.0|~9.0
- illuminate/support: ~6.0|~7.0|~8.0|~9.0
README
在Eloquent中使用查询参数进行简单的数据过滤和排序,例如
简单示例
https://example.com?sort=price-desc&name=iphone
<?php namespace App\Http\Controllers; use App\Filters\ProductFilter; use App\Models\Product; class ProductController extends Controller { public function index(ProductFilter $productFilter) { return Product::paginationFilter($productFilter); } }
<?php namespace App\Filters; use Stepovenko\FilterableAndSortable\Filters\QueryFilter; class ProductFilter extends QueryFilters { public function getFilterableFields(): array { return ['name']; } public function getSortableFields(): array { return ['price']; } public function name($term) { $this->builder->where('products.name', 'LIKE', "%$term%"); } }
或者您可以使用
$products = Product::filter($productFilter)->paginationFilter(); $products = Product::filter($productFilter)->get(); $products = Product::filter($productFilter)->pagination();
控制台命令创建过滤器
php arisan make:filter Product
附加方法和变量
<?php namespace App\Filters; use Stepovenko\FilterableAndSortable\Filters\QueryFilter; class ProductFilter extends QueryFilters { protected string $defaultSort = 'price-asc'; protected int $maxPerPage = 100; protected int $defaultPerPage = 15; public function getSortableFields(): array { return ['category_name']; } // if you saved price as string public function getSortableFieldsLikeNumber(): array { return ['price']; } // override standard sort prefix sort_ public function sort_categories_name($term) { $this->builder->where('category.name', 'LIKE', "%$term%"); } }
内部公共方法
<?php namespace App\Http\Controllers; use App\Filters\ProductFilter; use App\Models\Product; class ProductController extends Controller { public function index(ProductFilter $productFilter) { // internal public methods $productFilter->setDefaultSort('price-desc'); $perPega = $productFilter->getPerPage(); $request = $productFilter->getRequest(); $builder = $productFilter->getBuilder(); } }
您可以通过类来改变排序和过滤的方式
配置发布
php artisan vendor:publish --tag=filterable-and-sortable-config