class Filter {
protected $query;
protected $params;
public function __construct(Entity $model)
{
$this->query = $model->query();
}
public function apply($params)
{
$this->params = array_filter($params);
foreach($this->params as $key => $param) {
$this->applyParam($key, $param);
}
}
public function applyParam($key, $param)
{
if(method_exists($this, $key.'Filter'))
{
call_user_func_array([$this, $key.'Filter'], [$param]);
}
}
public function streetFilter($value)
{
if(is_array($value)) {
$this->query = $this->query->whereHas('objectdata', function ($query) use ($value) {
$query->where(function ($query) use ($value) {
$query->where('name', 'street_1')->whereIn('value', $value);
})->orWhere(function ($query) use ($value) {
$query->where('name', 'street_2')->whereIn('value', $value);
});
});
}
}
}