coderscantina / laravel-filter
基于laracasts方法的Laravel/Eloquent模型过滤器。
v1.0.1
2023-08-26 20:51 UTC
Requires
- php: ~7.2|^8.0
- illuminate/database: ^7.0||^8.0||^9.0||^10.0
- illuminate/http: ^7.0||^8.0||^9.0||^10.0
- illuminate/support: ^7.0||^8.0||^9.0||^10.0
Requires (Dev)
- graham-campbell/testbench: ^5.4
- mockery/mockery: ^1.3
- phpunit/phpunit: ^9.3
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