laraditz / model-filter
一个简单的优雅模型过滤器。
1.0.4
2024-05-15 08:48 UTC
Requires
- php: ^7.4|^8.0
- illuminate/database: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/http: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
This package is auto-updated.
Last update: 2024-09-15 09:41:26 UTC
README
为 Laravel 和 Lumen 提供一个简单的优雅模型过滤器。
安装
通过 Composer
$ composer require laraditz/model-filter
配置
将以下片段中的过滤器特质添加到您的模型中
use Laraditz\ModelFilter\Filterable; class User extends Model implements AuthenticatableContract, AuthorizableContract { use Filterable; ... }
在 App/Filters
文件夹下创建以 <model_name>Filter
格式的过滤器类。例如,对于 User
模型,您需要创建 UserFilter
类。
以下片段显示了 UserFilter
可能的样子
namespace App\Filters; use Laraditz\ModelFilter\Filter; use Illuminate\Database\Eloquent\Builder; class UserFilter extends Filter { public function name(string $value) { $this->where('name', 'LIKE', $value); } public function email(string $value) { $this->where('email', 'LIKE', "%$value%"); } // Filter relationship public function rank($value) { $this->whereHas('rank', function (Builder $query) use ($value) { $query->where('level', 'like', $value); }); } }
如果您想对哪些属性可以进行筛选有更多的控制,您可以在模型中添加 filterable
数组
protected $filterable = [ 'name', 'email' ];
用法
在您的控制器中,调用 filter
方法并将输入数据传递给您创建的过滤器。
$users = User::filter($request->all())->get();
您的请求查询字符串可能如下所示。
/users?name=farhan&rank=novice
您还可以传递 sort
参数以对结果进行排序。
/users?name=farhan&rank=novice&sort=name,level
通过在字段名称前添加 -
符号按降序排序
/users?name=farhan&rank=novice&sort=-name,level
就这样!
致谢
许可证
MIT。请参阅许可证文件以获取更多信息。