josueeek / php-filters
提供了一种通过查询字符串进行数据过滤的可组合接口
dev-main
2021-06-16 16:24 UTC
Requires
- illuminate/database: ^8.47
- illuminate/http: ^8.47
- illuminate/support: ^8.47
Requires (Dev)
- phpstan/phpstan: ^0.12.89
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.3
This package is auto-updated.
Last update: 2024-09-17 00:02:10 UTC
README
使用查询字符串进行过滤
此URL
/users?name=test&age=15
自动知道通过返回具有
- 名称包含
test - 年龄为
15
按年龄降序排列记录,而无需您编写样板代码 😱。
设置
- 在您的终端中运行
composer require josueeek/php-filters以拉取此包。
使用方法
- 在您希望进行过滤的模型类中,使用
FilterableTrait,例如
<?php use Josueeek\Filters\Traits\FilterableTrait; class User { use FilterableTrait; ... }
- 为该模型创建一个过滤器类,例如
UserFilter
<?php namespace App\Filters; use App\User; use Josueeek\Filters\BaseFilters; use Illuminate\Http\Request; use Carbon\Carbon; class UserFilters extends BaseFilters { public function name($term) { return $this->builder->where('users.name', 'LIKE', "%$term%"); } public function company($term) { return $this->builder->whereHas('company', function ($query) use ($term) { return $query->where('name', 'LIKE', "%$term%"); }); } public function age($term) { $year = Carbon::now()->subYear($age)->format('Y'); return $this->builder->where('dob', '>=', "$year-01-01")->where('dob', '<=', "$year-12-31"); } public function sort_age($type = null) { return $this->builder->orderBy('dob', (!$type || $type == 'asc') ? 'desc' : 'asc'); } }
注意每个方法的名称如何映射到每个查询字符串的键,例如在
/users?name=test&age=15&company=my-company&sort_age=desc中,方法的参数映射到值。
- 在控制器中注入
UserFilters😍
<?php namespace App\Http\Controllers; use App\User; use App\Filters\UserFilters; class UserController extends Controller { public function index(Request $request, UserFilters $filters) { return User::filter($filters)->get(); } }
这就完成了! 💃
现在,您可以通过执行应用程序并使用允许的查询字符串的变体来使用它。 🔥🔥🔥