private function processFilters($query, $filters)
{
$allowed_filters = array_merge($this->model->getFillable(), $this->model->getGuarded());
if (count($filters)) {
foreach ($filters as $filter) {
if (!in_array($filter['name'], $allowed_filters)) {
throw new InvalidArgumentException("The field [" . $filter['name'] . "] is not a valid filterable field.");
}
if (isset($filter['operator'])) {
switch (strtolower($filter['operator'])) {
case 'in':
$query->whereIn($filter['name'], $filter['value']);
break;
case 'like':
$query->where($filter['name'], 'LIKE', $filter['value']);
break;
case 'not null':
$query->whereNotNull($filter['name']);
break;
case 'null':
$query->whereNull($filter['name']);
break;
default:
$query->where($filter['name'], $filter['value']);
break;
}
} else {
$query->where($filter['name'], $filter['value']);
}
}
}
return $query;
}