baraveli / laravel-query-filters
一种最小化方法,通过查询参数过滤eloquent模型
v1.0
2021-01-26 20:55 UTC
This package is auto-updated.
Last update: 2024-09-27 05:02:57 UTC
README
一种最小化方法,通过查询参数过滤eloquent模型
安装
composer require baraveli/laravel-query-filters
使用
在您的Laravel应用程序中创建自定义过滤器类
在这种情况下,我有一个针对用户模型的过滤器。每个过滤器都应该扩展baraveli的 QueryFilter
类。每个过滤器类中的方法名与URL参数名相对应,因此在这种情况下,当调用 ?search="ssd" 时,实际上是在调用 search()
方法
<?php namespace App\Filters; use Illuminate\Database\Eloquent\Builder; use Baraveli\QueryFilters\QueryFilter; class UsersFilters extends QueryFilter { /** * per_Page * * @param mixed $number * @return void */ public function per_Page($number = 5) { return $this->builder->paginate($number); } /** * search * * @param mixed $search * @return Builder */ public function search($search) : Builder { return $this->builder->where('name','like', '%' . $search .'%'); } }
为您的Eloquent模型添加可过滤特征
添加此特征将为您在Laravel模型中提供 filter()
范围,您可以使用它来应用之前的查询过滤器
<?php namespace App\Models; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Baraveli\QueryFilters\Filterable; class User extends Authenticatable { use HasFactory, Notifiable, Filterable; }
响应
现在在控制器或路由中返回并应用过滤器
Route::get('users', function(UsersFilters $usersfilter){ return User::filter($usersfilter)->get(); });
现在您可以使用查询过滤器如下
- /api/users?search=Ms : 搜索所有用户名称
- /api/users?search=Ms&per_page=5 : 搜索所有用户名称并分页结果