Эта документация была автоматически переведена ИИ.
База данных
Обзор
База данных — это инструмент для взаимодействия с базами данных, предоставляемый NocoBase, который обеспечивает удобные функции взаимодействия с базами данных для no-code и low-code приложений. В настоящее время поддерживаются следующие базы данных:
- SQLite 3.8.8+
- MySQL 8.0.17+
- PostgreSQL 10.0+
Подключение к базе данных
В конструкторе Database вы можете настроить подключение к базе данных, передав параметр options.
Подробные параметры конфигурации см. в разделе Конструктор.
Определение модели данных
Database определяет структуру базы данных с помощью коллекции. Объект коллекции представляет собой таблицу в базе данных.
После определения структуры базы данных вы можете использовать метод sync() для её синхронизации.
Более подробное использование коллекции см. в разделе Коллекция.
Чтение и запись данных
Database выполняет операции с данными через Repository.
Более подробное использование CRUD-операций с данными см. в разделе Repository.
Конструктор
Сигнатура
constructor(options: DatabaseOptions)
Создаёт экземпляр базы данных.
Параметры
Методы, связанные с миграциями
addMigration()
Добавляет один файл миграции.
Сигнатура
addMigration(options: MigrationItem)
Параметры
Пример
addMigrations()
Добавляет файлы миграций из указанной директории.
Сигнатура
addMigrations(options: AddMigrationsOptions): void
Параметры
Пример
Вспомогательные методы
inDialect()
Проверяет, соответствует ли текущи й тип базы данных одному из указанных типов.
Сигнатура
inDialect(dialect: string[]): boolean
Параметры
getTablePrefix()
Получает префикс имени таблицы из конфигурации.
Сигнатура
getTablePrefix(): string
Конфигурация коллекций
collection()
Определяет коллекцию. Этот вызов аналогичен методу define в Sequelize: он создаёт структуру таблицы только в памяти. Чтобы сохранить её в базе данных, вам нужно вызвать метод sync.
Сигнатура
collection(options: CollectionOptions): Collection
Параметры
Все параметры конфигурации options соответствуют конструктору класса коллекции; см. Коллекция.
События
'beforeDefineCollection': Срабатывает перед определением коллекции.'afterDefineCollection': Срабатывает после определения коллекции.
Пример
getCollection()
Получает определённую коллекцию.
Сигнатура
getCollection(name: string): Collection
Параметры
Пример
hasCollection()
Проверяет, определена ли указанная коллекция.
Сигнатура
hasCollection(name: string): boolean
Параметры
Пример
removeCollection()
Удаляет определённую коллекцию. Она удаляется только из памяти; чтобы сохранить изменение, вам нужно вызвать метод sync.
Сигнатура
removeCollection(name: string): void
Параметры
События
'beforeRemoveCollection': Срабатывает перед удалением коллекции.'afterRemoveCollection': Срабатывает после удаления коллекции.
Пример
import()
Импортирует все файлы из директории как конфигурации коллекций в память.
Сигнатура
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>
Параметры
Пример
Коллекция, определённая в файле ./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
Параметры
Пример
Примечание: Класс модели, полученный из коллекции, не строго равен зарегистрированному классу модели, но наследует от него. Поскольку свойства класса модели Sequelize изменяются в процессе инициализации, NocoBase автоматически обрабатывает это отношение наследования. За исключением неравенства классов, все остальные определения могут использоваться в обычном режиме.
getRepository()
Получает пользовательский класс репозитория. Если пользовательский класс репозитория ранее не был зарегистрирован, будет возвращён класс репозитория NocoBase по умолчанию. Имя по умолчанию совпадает с именем коллекции.
Классы репозиториев в основном используются для CRUD-операций на основе моделей данных; см. Repository.
Сигнатура
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): Repository
Параметры
Если имя представляет собой имя ассоциации, например 'tables.relations', будет возвращён связанный класс репозитория. Если предоставлен второй параметр, репозиторий будет использовать значение внешнего ключа связанных данных при выполнении операций (запрос, обновление и т. д.).
Пример
Предположим, есть две коллекции: posts и authors, и коллекция posts имеет внешний ключ, указывающий на коллекцию authors:
События базы данных
on()
Прослушивает события базы данных.
Сигнатура
on(event: string, listener: (...args: any[]) => void | Promise<void>): void
Параметры
Имена событий по умолчанию поддерживают события модели Sequelize. Для глобальных событий используйте формат <sequelize_model_global_event>, а для событий одной модели — формат <model_name>.<sequelize_model_event>.
Описание параметров и подробные примеры всех встроенных типов событий см. в разделе Встроенные события.
off()
Удаляет функцию обработчика события.
Сигнатура
off(name: string, listener: Function)
Параметры
Пример
Операции с базой данных
auth()
Аутентификация подключения к базе данных. Может использоваться для проверки установления соединения приложения с данными.
Сигнатура
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>
Параметры
Пример
reconnect()
Переподключается к базе данных.
Пример
closed()
Проверяет, закрыто ли соединение с базой данных.
Сигнатура
closed(): boolean
close()
Закрывает соединение с базой данных. Эквивалентно sequelize.close().
sync()
Синхронизирует структуру коллекции базы данных. Эквивалентно sequelize.sync(); параметры см. в документации Sequelize.
clean()
Очищает базу данных, удаляя все коллекции.
Сигнатура
clean(options: CleanOptions): Promise<void>
Параметры
Пример
Удаляет все коллекции, кроме коллекции users.
Эксп орты на уровне пакета
defineCollection()
Создаёт содержимое конфигурации для коллекции.
Сигнатура
defineCollection(name: string, config: CollectionOptions): CollectionOptions
Параметры
Пример
Для файла конфигурации коллекции, который будет импортирован методом db.import():
extendCollection()
Расширяет содержимое конфигурации коллекции, уже находящейся в памяти, в основном для содержимого файлов, импортированных методом import(). Этот метод является методом верхнего уровня, экспортируемым пакетом @nocobase/database, и не вызывается через экземпляр db. Также можно использовать псевдоним extend.
Сигнатура
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptions
Параметры
Пример
Исходное определение коллекции книг (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().
Примечание: Это синхронное событие.
Сигнатура
Тип
Пример

