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

Быстрый старт

Обзор разработки плагинов
Создание первого плагина
Структура каталогов проекта

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

Обзор
Плагин
Коллекции (таблицы данных)
Операции с базой данных
Управление источниками данных (DataSourceManager)
Управление ресурсами (ResourceManager)
Контроль доступа (ACL)
Промежуточное ПО (Middleware)
Кэш
Событие
Контекст запроса
Миграции
Логгер
Интернационализация (I18n)
Командная строка
Управление задачами Cron (CronJobManager)
Тестирование

Клиентская разработка

Обзор
Плагин
Контекст
Маршрутизатор
Контроль доступа (ACL)
Управление источниками данных (DataSourceManager)
Ресурс
Запрос
Стили и темы
Логгер
Интернационализация (I18n)
Тестирование

Прочее

Руководство по обновлению плагинов
Список языков
Управление зависимостями
Сборка
Previous PageКоллекции (таблицы данных)
Next PageУправление источниками данных (DataSourceManager)
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#Database

Database — это важная часть источников данных (DataSource) типа "база данных". Каждый источник данных типа "база данных" имеет соответствующий экземпляр Database, доступ к которому можно получить через dataSource.db. Экземпляр базы данных основного источника данных также предоставляет удобный псевдоним app.db. Знакомство с общими методами db является основой для написания серверных плагинов.

#Компоненты Database

Типичный Database состоит из следующих частей:

  • Коллекция: Определяет структуру таблиц данных.
  • Model: Соответствует моделям ORM (обычно управляется Sequelize).
  • Repository: Уровень репозитория, который инкапсулирует логику доступа к данным, предоставляя методы для операций более высокого уровня.
  • FieldType: Типы полей.
  • FilterOperator: Операторы, используемые для фильтрации.
  • Event: События жизненного цикла и события базы данных.

#Время использования в плагинах

#Что подходит для этапа 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 } });

Уровень Repository обычно используется для инкапсуляции бизнес-логики, такой как пагинация, фильтрация, проверка разрешений и т.д.

#Операции через Model

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

Уровень Model напрямую соответствует сущностям 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Да

#События/хуки Database

ЭтапОперации с БД разрешены
beforeSyncНет
afterSyncДа
beforeValidateДа
afterValidateДа
beforeCreateДа
afterCreateДа
beforeUpdateДа
afterUpdateДа
beforeSaveДа
afterSaveДа
beforeDestroyДа
afterDestroyДа
afterCreateWithAssociationsДа
afterUpdateWithAssociationsДа
afterSaveWithAssociationsДа
beforeDefineCollectionНет
afterDefineCollectionНет
beforeRemoveCollectionНет
afterRemoveCollectionНет