Эта документация была автоматически переведена ИИ.
База данных — это инструмент для взаимодействия с базами данных, предоставляемый NocoBase, который обеспечивает удобные функции взаимодействия с базами данных для no-code и low-code приложений. В настоящее время поддерживаются следующие базы данных:
В конструкторе Database вы можете настроить подключение к базе данных, передав параметр options.
Подробные параметры конфигурации см. в разделе Конструктор.
Database определяет структуру базы данных с помощью коллекции. Объект коллекции представляет собой таблицу в базе данных.
После определения структуры базы данных вы можете использовать метод sync() для её синхронизации.
Более подробное использование коллекции см. в разделе Коллекция.
Database выполняет операции с данными через Repository.
Более подробное использование CRUD-операций с данными см. в разделе Repository.
Сигнатура
constructor(options: DatabaseOptions)Создаёт экземпляр базы данных.
Параметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
options.host | string | 'localhost' | Хост базы данных |
options.port | number | - | Порт службы базы данных; имеет значение по умолчанию, соответствующее используемой базе данных |
options.username | string | - | Имя пользователя базы данных |
options.password | string | - | Пароль базы данных |
options.database | string | - | Имя базы данных |
options.dialect | string | 'mysql' | Тип базы данных |
options.storage? | string | ':memory:' | Режим хранения для SQLite |
options.logging? | boolean | false | Включать ли логирование |
options.define? | Object | {} | Параметры определения таблицы по умолчанию |
options.tablePrefix? | string | '' | Расширение NocoBase, префикс имени таблицы |
options.migrator? | UmzugOptions | {} | Расширение NocoBase, параметры, связанные с менеджером миграций; см. реализацию Umzug |
addMigration()Добавляет один файл миграции.
Сигнатура
addMigration(options: MigrationItem)Параметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
options.name | string | - | Имя файла миграции |
options.context? | string | - | Контекст файла миграции |
options.migration? | typeof Migration | - | Пользовательский класс для файла миграции |
options.up | Function | - | Метод up файла миграции |
options.down | Function | - | Метод down файла миграции |
Пример
addMigrations()Добавляет файлы миграций из указанной директории.
Сигнатура
addMigrations(options: AddMigrationsOptions): voidПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
options.directory | string | '' | Директория, где расположены файлы миграций |
options.extensions | string[] | ['js', 'ts'] | Расширения файлов |
options.namespace? | string | '' | Пространство имён |
options.context? | Object | { db } | Контекст файла миграции |
Пример
inDialect()Проверяет, соответствует ли текущий тип базы данных одному из указанных типов.
Сигнатура
inDialect(dialect: string[]): booleanПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
dialect | string[] | - | Тип базы данных, возможные значения: mysql/postgres/mariadb |
getTablePrefix()Получает префикс имени таблицы из конфигурации.
Сигнатура
getTablePrefix(): stringcollection()Определяет коллекцию. Этот вызов аналогичен методу define в Sequelize: он создаёт структуру таблицы только в памяти. Чтобы сохранить её в базе данных, вам нужно вызвать метод sync.
Сигнатура
collection(options: CollectionOptions): CollectionПараметры
Все параметры конфигурации options соответствуют конструктору класса коллекции; см. Коллекция.
События
'beforeDefineCollection': Срабатывает перед определением коллекции.'afterDefineCollection': Срабатывает после определения коллекции.Пример
getCollection()Получает определённую коллекцию.
Сигнатура
getCollection(name: string): CollectionПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
name | string | - | Имя коллекции |
Пример
hasCollection()Проверяет, определена ли указанная коллекция.
Сигнатура
hasCollection(name: string): booleanПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
name | string | - | Имя коллекции |
Пример
removeCollection()Удаляет определённую коллекцию. Она удаляется только из памяти; чтобы сохранить изменение, вам нужно вызвать метод sync.
Сигнатура
removeCollection(name: string): voidПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
name | string | - | Имя коллекции |
События
'beforeRemoveCollection': Срабатывает перед удалением коллекции.'afterRemoveCollection': Срабатывает после удаления коллекции.Пример
import()Импортирует все файлы из директории как конфигурации коллекций в память.
Сигнатура
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>Параметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
options.directory | string | - | Путь к директории для импорта |
options.extensions | string[] | ['ts', 'js'] | Сканировать на наличие определённых суффиксов |
Пример
Коллекция, определённая в файле ./collections/books.ts, выглядит следующим образом:
Импортируйте соответствующую конфигурацию при загрузке плагина:
registerFieldTypes()Регистрирует пользовательские типы полей.
Сигнатура
registerFieldTypes(fieldTypes: MapOf<typeof Field>): voidПараметры
fieldTypes — это пара ключ-значение, где ключ — это имя типа поля, а значение — класс типа поля.
Пример
registerModels()Регистрирует пользовательские классы моделей данных.
Сигнатура
registerModels(models: MapOf<ModelStatic<any>>): voidПараметры
models — это пара ключ-значение, где ключ — это имя модели, а значение — класс модели.
Пример
registerRepositories()Регистрирует пользовательские классы репозиториев.
Сигнатура
registerRepositories(repositories: MapOf<RepositoryType>): voidПараметры
repositories — это пара ключ-значение, где ключ — это имя репозитория, а значение — класс репозитория.
Пример
registerOperators()Регистрирует пользовательские операторы запросов данных.
Сигнатура
registerOperators(operators: MapOf<OperatorFunc>)Параметры
operators — это пара ключ-значение, где ключ — это имя оператора, а значение — функция, генерирующая оператор сравнения.
Пример
getModel()Получает определённый класс модели данных. Если пользовательский класс модели ранее не был зарегистрирован, будет возвращён класс модели Sequelize по умолчанию. Имя по умолчанию совпадает с именем коллекции.
Сигнатура
getModel(name: string): ModelПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
name | string | - | Имя зарегистрированной модели |
Пример
Примечание: Класс модели, полученный из коллекции, не строго равен зарегистрированному классу модели, но наследует от него. Поскольку свойства класса модели Sequelize изменяются в процессе инициализации, NocoBase автоматически обрабатывает это отношение наследования. За исключением неравенства классов, все остальные определения могут использоваться в обычном режиме.
getRepository()Получает пользовательский класс репозитория. Если пользовательский класс репозитория ранее не был зарегистрирован, будет возвращён класс репозитория NocoBase по умолчанию. Имя по умолчанию совпадает с именем коллекции.
Классы репозиториев в основном используются для CRUD-операций на основе моделей данных; см. Repository.
Сигнатура
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): RepositoryПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
name | string | - | Имя зарегистрированного репозитория |
relationId | string | number | - | Значение внешнего ключа для связанных данных |
Если имя представляет собой имя ассоциации, например 'tables.relations', будет возвращён связанный класс репозитория. Если предоставлен второй параметр, репозиторий будет использовать значение внешнего ключа связанных данных при выполнении операций (запрос, обновление и т. д.).
Пример
Предположим, есть две коллекции: posts и authors, и коллекция posts имеет внешний ключ, указывающий на коллекцию authors:
on()Прослушивает события базы данных.
Сигнатура
on(event: string, listener: (...args: any[]) => void | Promise<void>): voidПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
| event | string | - | Имя события |
| listener | Function | - | Обработчик события |
Имена событий по умолчанию поддерживают события модели Sequelize. Для глобальных событий используйте формат <sequelize_model_global_event>, а для событий одной модели — формат <model_name>.<sequelize_model_event>.
Описание параметров и подробные примеры всех встроенных типов событий см. в разделе Встроенные события.
off()Удаляет функцию обработчика события.
Сигнатура
off(name: string, listener: Function)Параметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
| name | string | - | Имя события |
| listener | Function | - | Обработчик события |
Пример
auth()Аутентификация подключения к базе данных. Может использоваться для проверки установления соединения приложения с данными.
Сигнатура
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>Параметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
options? | Object | - | Параметры аутентификации |
options.retry? | number | 10 | Количество повторных попыток при неудачной аутентификации |
options.transaction? | Transaction | - | Объект транзакции |
options.logging? | boolean | Function | false | Выводить ли логи |
Пример
reconnect()Переподключается к базе данных.
Пример
closed()Проверяет, закрыто ли соединение с базой данных.
Сигнатура
closed(): booleanclose()Закрывает соединение с базой данных. Эквивалентно sequelize.close().
sync()Синхронизирует структуру коллекции базы данных. Эквивалентно sequelize.sync(); параметры см. в документации Sequelize.
clean()Очищает базу данных, удаляя все коллекции.
Сигнатура
clean(options: CleanOptions): Promise<void>Параметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
options.drop | boolean | false | Удалять ли все коллекции |
options.skip | string[] | - | Конфигурация имён коллекций для пропуска |
options.transaction | Transaction | - | Объект транзакции |
Пример
Удаляет все коллекции, кроме коллекции users.
defineCollection()Создаёт содержимое конфигурации для коллекции.
Сигнатура
defineCollection(name: string, config: CollectionOptions): CollectionOptionsПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Совпадает со всеми параметрами db.collection() |
Пример
Для файла конфигурации коллекции, который будет импортирован методом db.import():
extendCollection()Расширяет содержимое конфигурации коллекции, уже находящейся в памяти, в основном для содержимого файлов, импортированных методом import(). Этот метод является методом верхнего уровня, экспортируемым пакетом @nocobase/database, и не вызывается через экземпляр db. Также можно использовать псевдоним extend.
Сигнатура
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptionsПараметры
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Совпадает со всеми параметрами db.collection() |
mergeOptions? | MergeOptions | - | Параметры для npm-пакета deepmerge |
Пример
Исходное определение коллекции книг (books.ts):
Расширенное определение коллекции книг (books.extend.ts):
Если два вышеуказанных файла импортируются при вызове import(), то после повторного расширения с помощью extend() коллекция книг будет иметь поля title и price.
Этот метод очень полезен для расширения структур коллекций, уже определённых существующими плагинами.
База данных генерирует следующие соответствующие события на различных этапах своего жизненного цикла. Подписка на них с помощью метода on() позволяет выполнять специфическую обработку для удовлетворения определённых бизнес-потребностей.
'beforeSync' / 'afterSync'Срабатывает до и после синхронизации новой конфигурации структуры коллекции (полей, индексов и т. д.) с базой данных. Обычно это происходит при выполнении collection.sync() (внутренний вызов) и, как правило, используется для обработки логики специальных расширений полей.
Сигнатура
Тип
Пример
'beforeValidate' / 'afterValidate'Перед созданием или обновлением данных происходит процесс валидации на основе правил, определённых в коллекции. Соответствующие события срабатывают до и после валидации. Это происходит при вызове repository.create() или repository.update().
Сигнатура
Тип
Пример
'beforeCreate' / 'afterCreate'Соответствующие события срабатывают до и после создания записи. Это происходит при вызове repository.create().
Сигнатура
Тип
Пример
'beforeUpdate' / 'afterUpdate'Соответствующие события срабатывают до и после обновления записи. Это происходит при вызове repository.update().
Сигнатура
Тип
Пример
'beforeSave' / 'afterSave'Соответствующие события срабатывают до и после создания или обновления записи. Это происходит при вызове repository.create() или repository.update().
Сигнатура
Тип
Пример
'beforeDestroy' / 'afterDestroy'Соответствующие события срабатывают до и после удаления записи. Это происходит при вызове repository.destroy().
Сигнатура
Тип
Пример
'afterCreateWithAssociations'Это событие срабатывает после создания записи с иерархическими связанными данными. Оно происходит при вызове repository.create().
Сигнатура
Тип
Пример
'afterUpdateWithAssociations'Это событие срабатывает после обновления записи с иерархическими связанными данными. Оно происходит при вызове repository.update().
Сигнатура
Тип
Пример
'afterSaveWithAssociations'Это событие срабатывает после создания или обновления записи с иерархическими связанными данными. Оно происходит при вызове repository.create() или repository.update().
Сигнатура
Тип
Пример
'beforeDefineCollection'Срабатывает перед определением коллекции, например, при вызове db.collection().
Примечание: Это синхронное событие.
Сигнатура
Тип
Пример
'afterDefineCollection'Срабатывает после определения коллекции, например, при вызове db.collection().
Примечание: Это синхронное событие.
Сигнатура
Тип
Пример
'beforeRemoveCollection' / 'afterRemoveCollection'Срабатывает до и после удаления коллекции из памяти, например, при вызове db.removeCollection().
Примечание: Это синхронное событие.
Сигнатура
Тип
Пример