/**
  * @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);
         }
     }
 }