/** * @param null $filter * @return Category|\Illuminate\Database\Eloquent\Builder|static */ public function getModels($filter = null) { $models = Category::sortable($this->index_view); if ($this->show_trash()) { $models = $models->withTrashed(); } if (isset($filter)) { foreach ($this->filter_fields as $field) { if (trim($filter[$field]) != '') { $values = explode(',', $filter[$field]); $first = true; foreach ($values as $value) { if (in_array($field, $this->filter_numeric_fields)) { if ($first) { $models = $models->Where($field, $value); $first = false; } else { $models = $models->orWhere($field, $value); } } else { if (in_array($field, $this->filter_boolean_fields)) { $value = strtolower($value) == 'x'; if ($first) { $models = $models->Where($field, $value); $first = false; } else { $models = $models->orWhere($field, $value); } } else { if ($field == 'parent') { $value = '%' . $value . '%'; if ($first) { $models = $models->whereHas('parent', function ($q) use($value) { $q->where('name', 'like', $value); }); $first = false; } else { $models = $models->orWhereHas('parent', function ($q) use($value) { $q->where('name', 'like', $value); }); } } else { $value = '%' . $value . '%'; if ($first) { $models = $models->Where($field, 'LIKE', $value); $first = false; } else { $models = $models->orWhere($field, 'LIKE', $value); } } } } } } } } return $models; }