/** * Generate a Field object and add to form builder if Field exists. * * @param string $method * @param array $arguments * @return \Encore\Admin\Field */ public function __call($method, $arguments) { $className = __NAMESPACE__ . '\\Form\\Field\\' . ucfirst($method); if (class_exists($className)) { $column = $arguments[0]; $element = new $className($column, array_slice($arguments, 1)); $this->builder->fields()->push($element); return $element; } }
/** * Get all relations of model from callable. * * @return array */ public function getRelations() { $relations = $columns = []; foreach ($this->builder->fields() as $field) { $columns[] = $field->column(); } foreach (array_flatten($columns) as $column) { if (str_contains($column, '.')) { list($relation) = explode('.', $column); if (method_exists($this->model, $relation) && $this->model->{$relation}() instanceof Relation) { $relations[] = $relation; } } elseif (method_exists($this->model, $column)) { $relations[] = $column; } } return array_unique($relations); }