stepovenko/eloquent-filter-sort-pagination

用于Eloquent中的过滤和排序

1.0.9 2022-03-25 08:14 UTC

This package is auto-updated.

Last update: 2024-09-25 13:28:28 UTC


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