SupplierFilters.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Filters;
  3. use Illuminate\Http\Request;
  4. class SupplierFilters
  5. {
  6. protected $request;
  7. protected $queryBuilder;
  8. protected $filters = [];
  9. protected $array_filter;
  10. protected $params = [
  11. 'name','contact_man','phone','invoice_title','bank','bank_account','opening_bank'
  12. ];
  13. public function __construct(Request $request)
  14. {
  15. $this->request = $request;
  16. }
  17. public function apply($builder)
  18. {
  19. $this->queryBuilder = $builder;
  20. $filters = array_filter($this->request->only($this->filters));
  21. foreach ($filters as $filter => $value) {
  22. if (method_exists($this, $filter)) {
  23. $this->$filter($value, $this->queryBuilder);
  24. }
  25. }
  26. $this->afterApply();
  27. return $this->queryBuilder;
  28. }
  29. private function afterApply()
  30. {
  31. }
  32. private function name($name)
  33. {
  34. $this->queryBuilder->where('name','like',"{$name}%");
  35. }
  36. private function contact_man($contact_man)
  37. {
  38. $this->queryBuilder->where('contact_man','like',"{$contact_man}%");
  39. }
  40. private function phone($phone)
  41. {
  42. $this->queryBuilder->where('phone','like',"{$phone}%");
  43. }
  44. private function invoice_title($invoice_title)
  45. {
  46. $this->queryBuilder->where('invoice_title','like',"{$invoice_title}%");
  47. }
  48. private function bank($bank)
  49. {
  50. $this->queryBuilder->where('bank','like',"{$bank}%");
  51. }
  52. private function bank_account($bank_account)
  53. {
  54. $this->queryBuilder->where('bank_account','like',"{$bank_account}%");
  55. }
  56. private function opening_bank($opening_bank)
  57. {
  58. $this->queryBuilder->where('opening_bank','like',"{$opening_bank}%");
  59. }
  60. }