Edit File: UserFilter.php
<?php namespace App\Http\Filters; use Carbon\Carbon; use Illuminate\Database\Eloquent\Builder; class UserFilter extends BaseFilters { /** * Registered filters to operate upon. * * @var array */ protected $filters = [ 'first_name', 'last_name', 'name', 'age', 'gender', 'email', 'country', 'city', 'interest_options', ]; /** * Filter the query by a given name. * * @param string|int $value * @return Builder */ protected function firstName($value): Builder { if ($value) { return $this->builder->where('first_name', 'like', "%$value%"); } return $this->builder; } /** * Filter the query by a given name. * * @param string|int $value * @return Builder */ protected function lastName($value): Builder { if ($value) { return $this->builder->where('last_name', 'like', "%$value%"); } return $this->builder; } /** * Filter the query by a given name. * * @param string|int $value * @return Builder */ protected function name($value): Builder { if ($value) { return $this->builder->where(function ($query) use ($value) { $query->where('first_name', 'like', "%$value%") ->orWhere('last_name', 'like', "%$value%"); }); } return $this->builder; } /** * Filter the query by a given age. * * @param string|int $value * @return Builder */ protected function age($value): Builder { if ($value) { $birthDateFrom = Carbon::now()->subYears($value)->startOfYear(); $birthDateTo = Carbon::now()->subYears($value)->endOfYear(); return $this->builder->whereBetween('birth_date', [$birthDateFrom, $birthDateTo]); } return $this->builder; } /** * Filter the query by a given gender. * * @param string|int $value * @return Builder */ protected function gender($value): Builder { if ($value) { return $this->builder->where('gender', $value); } return $this->builder; } /** * Filter the query by a given email. * * @param string|int $value * @return Builder */ protected function email($value): Builder { if ($value) { return $this->builder->where('email', 'like', "%$value%"); } return $this->builder; } /** * Filter the query by a given country. * * @param string|int $value * @return Builder */ protected function country($value): Builder { if ($value) { return $this->builder->whereHas('country', function ($query) use ($value) { $query->where('country_id', $value); }); } return $this->builder; } /** * Filter the query by a given city. * * @param string|int $value * @return Builder */ protected function city($value): Builder { if ($value) { return $this->builder->whereHas('city', function ($query) use ($value) { $query->where('city_id', $value); }); } return $this->builder; } protected function interestOptions($value): Builder { if (!empty($value)) { // Decode the value if it's a JSON string, otherwise use it as is $decodedValue = is_string($value) ? json_decode($value, true) : $value; // Ensure the decoded value is an array before applying whereIn if (is_array($decodedValue)) { return $this->builder->whereHas('interestOptions', function ($query) use ($decodedValue) { $query->whereIn('interest_option_id', $decodedValue); }); } } return $this->builder; } }
Back to File Manager