Ця документація була автоматично перекладена штучним інтелектом.
Database — це інструмент для взаємодії з базами даних, який надає 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', буде повернуто пов'язаний клас репозиторію. Якщо надано другий параметр, репозиторій використовуватиметься на основі значення зовнішнього ключа реляційних даних (під час запитів, оновлень тощо).
Приклад
Припустимо, є дві колекції: статті та автори, і колекція статей має зовнішній ключ, що вказує на колекцію авторів:
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 (books.ts):
Розширене визначення колекції books (books.extend.ts):
Якщо два файли вище імпортуються під час виклику import(), після повторного розширення за допомогою extend(), колекція books матиме поля 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().
Примітка: Ця подія є синхронною.
Підпис
Тип
Приклад