| Total Complexity | 6 |
| Total Lines | 57 |
| Duplicated Lines | 0 % |
| Changes | 0 | ||
| 1 | <?php |
||
| 7 | abstract class FilterBuilder implements Filter |
||
| 8 | { |
||
| 9 | /** |
||
| 10 | * Filter maps. |
||
| 11 | * |
||
| 12 | * Ex.: ['name' => NameFilter::class] |
||
| 13 | * |
||
| 14 | * @var array |
||
| 15 | */ |
||
| 16 | protected $availableFilters = []; |
||
| 17 | |||
| 18 | /** |
||
| 19 | * Apply all filters to the model. |
||
| 20 | * |
||
| 21 | * @param Builder $builder |
||
| 22 | * @param array|null $filters |
||
| 23 | * @return Builder |
||
| 24 | */ |
||
| 25 | public function apply(Builder $builder, $filters): Builder |
||
| 26 | { |
||
| 27 | if (is_null($filters)) { |
||
| 28 | return $builder; |
||
| 29 | } |
||
| 30 | |||
| 31 | foreach ($filters as $filter => $value) { |
||
| 32 | if ($this->filterExists($filter)) { |
||
| 33 | $builder = $this->applyFilterQuery($builder, $filter, $value); |
||
| 34 | } |
||
| 35 | } |
||
| 36 | |||
| 37 | return $builder; |
||
| 38 | } |
||
| 39 | |||
| 40 | /** |
||
| 41 | * Determine whether filter is available. |
||
| 42 | * |
||
| 43 | * @param $filter |
||
| 44 | * @return bool |
||
| 45 | */ |
||
| 46 | protected function filterExists($filter): bool |
||
| 49 | } |
||
| 50 | |||
| 51 | /** |
||
| 52 | * Create filter instance and apply it to the query. |
||
| 53 | * |
||
| 54 | * @param Builder $builder |
||
| 55 | * @param $filter |
||
| 56 | * @param $value |
||
| 57 | * @return Builder |
||
| 58 | */ |
||
| 59 | protected function applyFilterQuery(Builder $builder, $filter, $value): Builder |
||
| 66 |