logologo
Початок
Посібник
Розробка
Плагіни
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Початок
Посібник
Розробка
Плагіни
API
logologo

Швидкий старт

Огляд розробки плагінів
Написання першого плагіна
Структура каталогу проєкту

Серверна розробка

Огляд
Плагін (Plugin)
Колекції (таблиці даних)
Операції з базою даних (Database)
Керування джерелами даних (DataSourceManager)
Керування ресурсами (ResourceManager)
Контроль доступу (ACL)
Проміжне ПЗ (Middleware)
Кеш (Cache)
Подія (Event)
Контекст запиту (Context)
Скрипт оновлення (Migration)
Логи (Logger)
Інтернаціоналізація (I18n)
Командний рядок (Command)
Керування завданнями за розкладом (CronJobManager)
Тестування (Test)

Клієнтська розробка

Огляд
Плагін (Plugin)
Контекст (Context)
Маршрутизатор (Router)
Контроль доступу (ACL)
Керування джерелами даних (DataSourceManager)
Ресурс (Resource)
Запит (Request)
Стилі та теми (Styles & Themes)
Логи (Logger)
Інтернаціоналізація (I18n)
Тестування (Test)

Інше

Посібник з оновлення плагінів
Список мов
Керування залежностями
Збірка
Previous PageКолекції (таблиці даних)
Next PageКерування джерелами даних (DataSourceManager)
Повідомлення про переклад ШІ

Ця документація була автоматично перекладена штучним інтелектом.

#База даних

Об'єкт Database є важливою складовою джерел даних типу "база даних" (DataSource). Кожне джерело даних такого типу має відповідний екземпляр Database, доступ до якого можна отримати через dataSource.db. Екземпляр бази даних основного джерела даних також надає зручний псевдонім app.db. Ознайомлення зі стандартними методами db є основою для написання серверних плагінів.

#Складові частини Database

Типовий об'єкт Database складається з таких частин:

  • Колекція (Collection): Визначає структуру таблиці даних.
  • Модель (Model): Відповідає моделям ORM (зазвичай керується Sequelize).
  • Репозиторій (Repository): Рівень репозиторію, який інкапсулює логіку доступу до даних, надаючи методи для операцій вищого рівня.
  • Тип поля (FieldType): Типи полів.
  • Оператор фільтрації (FilterOperator): Оператори, що використовуються для фільтрації.
  • Подія (Event): Події життєвого циклу та події бази даних.

#Коли використовувати Database у плагінах

#Що варто робити на етапі beforeLoad

На цьому етапі операції з базою даних заборонені. Він підходить для реєстрації статичних класів або прослуховування подій.

  • ``db.registerFieldTypes() — для визначення власних типів полів
  • ``db.registerModels() — для реєстрації власних класів моделей
  • ``db.registerRepositories() — для реєстрації власних класів репозиторіїв
  • ``db.registerOperators() — для реєстрації власних операторів фільтрації
  • ``db.on() — для прослуховування подій, пов'язаних з базою даних

#Що варто робити на етапі load

На цьому етапі вже завантажені всі попередні визначення класів та події, тому завантаження таблиць даних відбудеться без пропущених або відсутніх залежностей.

  • ``db.defineCollection() — для визначення нових таблиць даних
  • ``db.extendCollection() — для розширення конфігурацій існуючих таблиць даних

Якщо ви визначаєте вбудовані таблиці для плагіна, рекомендується розміщувати їх у каталозі ./src/server/collections. Детальніше дивіться у розділі Колекції.

#Операції з даними

Об'єкт Database надає два основні способи доступу та маніпуляції даними:

#Операції через Repository

const repo = db.getRepository('users');
const user = await repo.findOne({ filter: { id: 1 } });

Рівень репозиторію зазвичай використовується для інкапсуляції бізнес-логіки, такої як пагінація, фільтрація, перевірка дозволів тощо.

#Операції через Model

const UserModel = db.getModel('users');
const user = await UserModel.findByPk(1);

Рівень моделі безпосередньо відповідає сутностям ORM і підходить для виконання низькорівневих операцій з базою даних.

#На яких етапах дозволені операції з базою даних?

#Життєвий цикл плагіна

ЕтапДозволені операції з базою даних
staticImportНі
afterAddНі
beforeLoadНі
loadНі
installТак
beforeEnableТак
afterEnableТак
beforeDisableТак
afterDisableТак
removeТак
handleSyncMessageТак

#Події застосунку

ЕтапДозволені операції з базою даних
beforeLoadНі
afterLoadНі
beforeStartТак
afterStartТак
beforeInstallНі
afterInstallТак
beforeStopТак
afterStopНі
beforeDestroyТак
afterDestroyНі
beforeLoadPluginНі
afterLoadPluginНі
beforeEnablePluginТак
afterEnablePluginТак
beforeDisablePluginТак
afterDisablePluginТак
afterUpgradeТак

#Події/хуки бази даних

ЕтапДозволені операції з базою даних
beforeSyncНі
afterSyncТак
beforeValidateТак
afterValidateТак
beforeCreateТак
afterCreateТак
beforeUpdateТак
afterUpdateТак
beforeSaveТак
afterSaveТак
beforeDestroyТак
afterDestroyТак
afterCreateWithAssociationsТак
afterUpdateWithAssociationsТак
afterSaveWithAssociationsТак
beforeDefineCollectionНі
afterDefineCollectionНі
beforeRemoveCollectionНі
afterRemoveCollectionНі