项目作者: westhack

项目描述 :
laravel eloquent search
高级语言: PHP
项目地址: git://github.com/westhack/laravel-eloquent-search.git
创建时间: 2019-05-10T14:16:20Z
项目社区:https://github.com/westhack/laravel-eloquent-search

开源协议:

下载


laravel-eloquent-search

一个简化 laravel model 筛选条件的库

介绍

如果我们想返回由多个参数筛选的用户列表:

/users?username=er&group_id=2&roles[]=1&roles[]=4&roles[]=7&created_at[]=2019-03-05&created_at[]=2019-03-06

$request->all() 的结果:

  1. [
  2. 'username' => 'er',
  3. 'group_id' => '2',
  4. 'roles' => ['1','4','7'],
  5. "created_at" => ["2019-03-05", "2019-03-06"]
  6. ]

要根据这些参数进行筛选,我们需要做如下工作:

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Http\Requests;
  5. use App\User;
  6. class UserController extends Controller
  7. {
  8. public function index(Request $request)
  9. {
  10. $query = User::where('group_id', $request->input('group_id'));
  11. if ($request->has('username'))
  12. {
  13. $query->where('username', 'LIKE', '%' . $request->input('username') . '%');
  14. }
  15. if ($request->has('created_at'))
  16. {
  17. $query->whereBetween('created_at', $request->input('created_at'));
  18. }
  19. $query->whereHas('roles', function ($q) use ($request)
  20. {
  21. return $q->whereIn('id', $request->input('roles'));
  22. });
  23. return $query->get();
  24. }
  25. }

我们使用 laravel-eloquent-search 来减少工作量

model 引入 search trait
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use EloquentSearch\SearchTrait;
  5. class User extends Model
  6. {
  7. use SearchTrait;
  8. }
User Controller
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Http\Requests;
  5. use App\User;
  6. class UserController extends BaseController
  7. {
  8. public function index(Request $request)
  9. {
  10. return User::search($request->all())->get();
  11. }
  12. }
请求示例
  1. let search = {
  2. "name": {
  3. "column": "username",
  4. "operator": "like",
  5. "value": "er"
  6. },
  7. "group_id": {
  8. "column": "group_id",
  9. "operator": "=",
  10. "value": "2"
  11. },
  12. "roles": {
  13. "column": "roles",
  14. "operator": "in",
  15. "value": ["1","4","7"],
  16. },
  17. "created_at": {
  18. "column": "created_at",
  19. "operator": "between",
  20. "value": ["2019-03-05", "2019-03-06"]
  21. }
  22. }
  23. // or
  24. let search = {
  25. "name:like": "er",
  26. "group_id:=": 2,
  27. "roles:in": ["1","4","7"],
  28. "created_at:between": ["2019-03-05", "2019-03-06"]
  29. }
  30. axios.post('http://127.0.0.1:8000/users', search)
  31. .then(function (response) {
  32. console.log(response);
  33. })
  34. .catch(function (error) {
  35. console.log(error);
  36. });

安装

  1. composer require westhack/laravel-eloquent-search