Filter.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019/4/30 0030
  6. * Time: 14:17
  7. */
  8. namespace App\Http\Filters;
  9. use Illuminate\Http\Request;
  10. abstract class Filter
  11. {
  12. /**
  13. * @var Request
  14. */
  15. protected $request;
  16. /**
  17. * The Eloquent builder.
  18. *
  19. * @var \Illuminate\Database\Eloquent\Builder
  20. */
  21. protected $builder;
  22. /**
  23. * Registered filters to operate upon.
  24. *
  25. * @var array
  26. */
  27. protected $filters = [];
  28. /**
  29. * Create a new ThreadFilters instance.
  30. *
  31. * @param Request $request
  32. */
  33. public function __construct(Request $request)
  34. {
  35. $this->request = $request;
  36. }
  37. /**
  38. * Apply the filters.
  39. *
  40. * @param \Illuminate\Database\Eloquent\Builder $builder
  41. * @return \Illuminate\Database\Eloquent\Builder
  42. */
  43. public function apply($builder)
  44. {
  45. $this->builder = $builder;
  46. foreach ($this->getFilters() as $filter => $value) {
  47. if (method_exists($this, $filter)) {
  48. $this->$filter($value);
  49. }
  50. }
  51. return $this->builder;
  52. }
  53. /**
  54. * Fetch all relevant filters from the request.
  55. *
  56. * @return array
  57. */
  58. public function getFilters()
  59. {
  60. return array_filter($this->request->only($this->filters));
  61. }
  62. }