coderscantina/laravel-filter

基于laracasts方法的Laravel/Eloquent模型过滤器。

v1.0.1 2023-08-26 20:51 UTC

This package is auto-updated.

Last update: 2024-09-26 23:12:07 UTC


README

基于laracasts方法的Laravel/Eloquent模型过滤器。

特性

开始使用

  • 安装此包

安装

使用composer安装此包

$ composer require coderscantina/filter

使用方法

定义过滤器

<?php namespace App;
 
use CodersCantina\Filter\ExtendedFilter;
 
class TestFilter extends ExtendedFilter
{
    public function name($name)
    {
        return $this->builder->where('name', $name);        
    }
    
    public function latest()
    {
        return $this->builder->latest();        
    }
}

在你的模型中

<?php namespace App;
 
use Illuminate\Database\Eloquent\Model;
use CodersCantina\Filter\Filterable;
 
class TestModel extends Model
{
    use Filterable;
}

在你的控制器中

<?php namespace App\Http\Controllers;
 
use App\TestModel;
use App\TestFilter;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Collection;
 
class LessonsController extends Controller
{
    /**
     * Show all lessons.
     *
     * @param  Request $request
     * @return Collection
     */
    public function index(Request $request)
    {
        $filter = new TestFilter($request->all());

        return TestModel::filter($filter)->get();
    }
}

可排序

ExtendedFilter中包含的Sortable特质提供了排序功能

['sort' => '+foo,-bar']; // -> order by foo asc, bar desc

也可以使用外键关系进行排序

['sort' => '+foo.bar']; // -> left join x on x.id = foo.id order by foo.bar asc

要限制可排序的列,请重写sortColumns字段

   protected $sortColumns = ['foo', 'bar'];

范围过滤器

ExtendedFilter提供了范围过滤器的辅助工具,形式为

['foo' => 'abc...']; // -> foo >= 'abc'
['foo' => '...efg']; // -> foo <= 'abc'
['foo' => 'abc...efg']; // -> foo >= 'abc' and foo <= 'abc'

以及日期范围过滤器的辅助工具

['foo' => '2017-01-01...']; // -> foo >= '2017-01-01 00:00:00'
['foo' => '...2017-12-31 01:02:03']; // -> foo <= '2017-12-31 01:02:03'
['foo' => '2017-01-01...2017-12-31']; // -> foo >= '2017-01-01 00:00:00' and foo <= '2017-12-31 23:59:59' 

扩展提示

  • 通过重写getSortColumns方法以实现自定义实现,指定哪些列是可搜索的。
  • 通过重写isValidMethod方法进一步限制可能的查询参数。请注意,在数组中返回sort以允许排序。

变更日志

有关最近更改的更多信息,请参阅变更日志

测试

$ composer test