stepovenko / eloquent-filter-sort-pagination
For filtering and sorting in 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
Simple filtering and sorting of data in Eloquent uses query parameters for example
Simple example
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%"); } }
Or you can use
$products = Product::filter($productFilter)->paginationFilter(); $products = Product::filter($productFilter)->get(); $products = Product::filter($productFilter)->pagination();
Console command to create a filter
php arisan make:filter Product
Additional methods and variables
<?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%"); } }
internal public methods
<?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(); } }
You can change the way you sort and filter over classes
config publication
php artisan vendor:publish --tag=filterable-and-sortable-config