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