---
# System prepended metadata

title: Как работает сканер?

---

# Как работает сканер?

Сканер генерирует схему таблиц базы данных в JSON или в виде массива объектов.

Эта схема описывает все таблицы и их поля. Все поля имеют собственные параметры.

## Поддерживаемые типы данных MySQL

#### Числовые

- tinyint
- mediumint
- int
- bigint
- decimal
- float
- double

#### Строковые

- char
- varchar
- text

#### Дата и время

- date
- time
- datetime

## Параметры таблицы

- `name` - наименование таблицы
- `alias` - псевдоним таблицы
- `show` - если `true`, то поле отображается в меню
- `softDelete` - если `true`, то записи из этой таблицы физически удалятся не будут, перед использованием данной опции нужно создать в таблице поле `deleted int(1) unsigned default 0`
- `timestamps` - если `true`, то при сохранении и обновлении записи в таблице будут предзаполняться поля `created_at` и `updated_at`, соответственно в таблице должны присутствовать эти поля с типом `datetime`
- `description` - описание таблицы
- `pagination` - если `true`, то список будет будет с постраничной навигацией
- `defaultPageSize?` - кол-во строк на странице (по умолчанию 10)

## Основные параметры поля

- `field.name` - имя поля
- `field.alias` - псевдоним поля
- `field.description` - описание поля

## Параметры элемента управления

- `field.control.type` - тип элемента управления

#### Возможные типы элементов управления

- input
- number
- select
- datepicker
- timeicker
- datatimepicker
- radio
- checkbox
- upload

## Атрибуты элемента управления

Все элементы управления принимают аттрибуты из документации https://ant.design/

- `input` и `textarea` - https://ant.design/components/input/#API
- `number` - https://ant.design/components/input-number/#API
- `datepicker` и `datetimepicker` - https://ant.design/components/date-picker/#API
- `timepicker` - https://ant.design/components/time-picker/#API
- `upload` - https://ant.design/components/upload/#API

Все аттрибуты записываются в объект `field.control.attributes`

## Валидация элемента управления

- `field.control.validation.empty?` - если определено и TRUE, то значение не может быть пустым

- `field.control.validation.allowFileMime?` - массив mime-типов файлов, которые могут быть загружены (`["image/png", "image/jpeg"]`)

- `field.control.validation.maxFileSize?` - максимальный размер файла в мегабайтах

## Связи полей

Поле таблицы может быть связано с другими таблицами.

#### One To Many

```json
"oneToMany": {
  "table": "",
  "key": "",
  "fields": []
}
```

`field.oneToMany.table` - имя таблицы-справочника, на которую ссылается поле
`field.oneToMany.key` - имя поля таблицы-справочника, на которое ссылается поле, например `id`
`field.oneToMany.fields` - массив полей таблицы-справочника, значение которых нужно подтянуть на вывод. Если полей в массиве несколько, то они сконкатенируются через пробел в одну строку. Пример `["firstname", "lastname"]`

#### Many To Many

```json
"manyToMany": {
  "link": {
    "table": "",
    "parentKey": "",
    "childKey": ""
  },
  "ref": {
    "table": "",
    "key": "",
    "fields": []
  }
}
```

`field.manyToMany.link.table` - имя связующей таблицы
`field.manyToMany.link.parentKey` - имя поля-ключа таблицы данного поля
`field.manyToMany.link.childKey` - имя поля-ключа таблицы-справочника

`field.manyToMany.ref` - описание объекта соответствует описанию связи oneToMany
`field.manyToMany.ref.extra?` - дополнительные поля таблицы-справочника. Данная опция используется для связи с системной таблицей ядра `core_files`. Значение в таком случае всегда должно быть `["original", "thumbnail"]` в обязательном порядке

## Настройки отображения поля в списке

За эти настройки отвечает объект `field.view.list`

`field.view.list.display` - если `true`, то поле будет показано в списке
`field.view.list.sortable?` - если `true`, то список будет сортироваться по этому полю
`field.view.list.filterable?` - если `true`, то список будет фильтроваться по этому полю
`field.view.list.defaultSortOrder?` - порядок сортировки поля по умолчанию,  возможные значения `ascend` или `descend`
`field.view.list.sortPriority?` - приоритет сортировки поля в случае сортировки списка по нескольким полям одновременно (число)
`field.view.list.sortAs?` - алгоритм сортировки поля, возможные значения `string`, `number`, `date`