# Как работает сканер?
Сканер генерирует схему таблиц базы данных в 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`