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