mehdirajabi / 可过滤
通过数组查询字符串过滤 eloquent 模型
1.0.0
2023-07-26 11:25 UTC
README
简介
Laravel 可过滤特性是一个强大的包,提供了一种可重用的特性,可以轻松地在 Laravel Eloquent 模型中实现过滤功能。它允许根据多个参数过滤查询结果,使创建动态和灵活的 API 或数据过滤机制变得更加简单。
特性
- 轻松在 Eloquent 模型中实现过滤。
- 根据各种查询参数过滤数据。
- 支持多种过滤类型,例如精确匹配、部分匹配、范围等。
- 可定制和可扩展,以添加新的过滤类型。
- 通过将过滤逻辑与主模型分离,提高代码的可读性和可维护性。
安装
您可以通过运行以下命令使用 Composer 安装该包
composer require mehdirajabi/filterable
用法
1. 将 Filterable 特性应用到您的 Eloquent 模型
打开您想要应用过滤功能的 Eloquent 模型,并添加 Filterable 特性
use Mehdirajabi\Filterable\Filterable; class User extends Model { use Filterable; }
在您的控制器中
class UserController extends Controller { public function index() { return User::filter()->actived()->get(); } }
2. 可过滤是如何工作的?
使用了两个查询字符串,filterColumns 和 filterValues,两者都是数组。所有列的默认操作符是 "like" 操作符。
例如
http://test.com/api/user/users?filterColumns[0]=name&filterValues[0]=Alex
3. 关联过滤
要过滤关系,请添加嵌套的列名。例如,如果用户与配置文件有关系,并且配置文件有一个 'sex' 列,请使用以下约定
use Mehdirajabi\Filterable\Filterable; class User extends Model { use Filterable; public function profile() { return $this->hasOne(UserProfile::class); } }
http://test.com/api/user/users?filterColumns[0]=profile.sex&filterValues[0]=male
4. 更改过滤模式操作符
要更改 'status' 列的操作符,定义 filterMode 属性
use Mehdirajabi\Filterable\Operators\FilterEqual; class User extends Model { protected $filterMode = [ 'status' => FilterEqual::class ]; }
5. 在控制器中更改操作符
use Mehdirajabi\Filterable\Operators\FilterBetween; class UserController extends Controller { public function index() { return User::filter(['id' => FilterBetween::class])->paginate(100); } }
介于操作符
use Mehdirajabi\Filterable\Operators\FilterBetween; class User extends Model { protected $filterMode = [ 'created_at' => FilterBetween::class ]; }
http://test.com/users?filterColumns[0]=created_at&filterValues[0]=2023-06-23 00:00:00, 2023-06-24 23:59:59