/** * @param bool|array|null $fields * @param array $orderRules * @param array $filterRules * * @return Builder */ protected function buildQueryForWidget($fields = true, array $orderRules = [], array $filterRules = []) { $query = $this->newQuery(); $t = [$this->section->getId() => true]; $selectFields = []; if (is_array($fields)) { foreach ($fields as $fieldKey) { if ($this->hasField($fieldKey)) { continue; } $selectFields[] = $this->getFieldsCollection()->getByKey($fieldKey); } } elseif ($fields === true) { $selectFields = $this->getFieldsCollection(); } elseif ($fields === false) { $query->selectRaw('COUNT(*) as total_docs'); } // TODO: предусмотреть relation поля if ($fields !== false) { foreach ($selectFields as $field) { $field->querySelectColumn($query, $this); } } if (!empty($orderRules)) { $this->buildQueryOrdering($query, $orderRules, $t); } if (!empty($filterRules)) { $this->buildQueryFilters($query, $filterRules, $t); } return $query; }
/** * @return array */ public function getAliases() { return [route('backend.datasource.edit', [$this->section->getId()]), route('backend.datasource.field.create', [$this->section->getId()]), route('backend.datasource.document.create', [$this->section->getId()]), route('backend.datasource.document.edit', [$this->section->getId(), '*'])]; }
/** * @param $table * @param SectionInterface $section * @param FieldGroupInterface|FieldInterface $field * @param bool|true $system */ protected function appendDatabaseField($table, SectionInterface $section, $field, $system = true) { if ($field instanceof FieldInterface) { $field->is_system = $system; if ($field = $section->fields()->save($field)) { $field->setDatabaseFieldType($table); } } elseif ($field instanceof FieldGroupInterface) { $group = $field; $group->section_id = $section->getId(); $group->save(); foreach ($group->getFields() as $field) { $field->group_id = $group->id; $this->appendDatabaseField($table, $section, $field, $system); } } }