svil4ok / laravel-query-filters
1.0.1
2017-11-14 13:41 UTC
Requires
- php: >=7.0.0
- illuminate/database: ~5.0
- illuminate/http: ~5.0
- illuminate/support: ~5.0
Requires (Dev)
- orchestra/testbench: ^3.5
- phpunit/phpunit: ^6.4
This package is auto-updated.
Last update: 2024-09-29 03:41:51 UTC
README
关于
想象一下,如果我们需要根据某些标准(如名称、电子邮件、位置、公司等)过滤存储在数据库中的所有用户,将会怎样。
/users?country=Bulgaria&city=Sofia&name=Svilen
例如,为了过滤所有这些参数,我们可能需要执行类似以下操作:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\User; class UserController extends Controller { public function index(Request $request) { $users = (new User)->newQuery(); if ($request->has('country')) { $users->where('country', '=', $request->get('country')); } if ($request->has('city')) { $users->where('city', '=', $request->get('city')); } if ($request->has('name')) { $users->where('name', 'LIKE', '%' . $request->get('name') . '%'); } // ... // other filters // ... return $users->get(); } }
使用这个包,您可以轻松地根据请求的查询字符串创建过滤器,并将控制器重构为以下形式:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\User; class UserController extends Controller { public function index(UserFilters $filters) { return User::filter($filters)->get(); } }
用法
- 将
Filterable特质添加到您的模型中,以允许使用Model::filter()。
<?php namespace App; use Illuminate\Database\Eloquent\Model; use SGP\QueryFilters\Filterable; class User extends Model { use Filterable; }
- 使用以下模板生成您的模型过滤器:
<?php namespace App; use SGP\QueryFilters\QueryFilters; class UserFilters extends QueryFilters { public function filterByOption($value) { return $this->builder->where('column', 'operator', $value); } }
- 使用您的过滤器
<?php namespace App\Http\Controllers; use App\User; use App\UserFilters; class MyController extends Controller { public function index(UserFilters $filters) { return User::filter($filters)->get(); } }