DevCraft Документации
Руководства

Схема шлюза БД и автор записи v200.4.1

Как Admin приводит таблицы Cycle к моделям и кто пишется в creator / lastEditor.

Когда схема обновляется сама

Шлюз DatabaseGateway перед работой ORM вызывает SchemaSyncService::ensureSchemaReady().

  1. Сначала накатываются все ещё не применённые файлы в devcraft/src/database/migrations/ (и при включённом debug тоже).
  2. Если в настройках Admin включён debug — отличия схемы и базы применяются «на лету» (SyncTables), новые файлы не появляются.
  3. Если debug выключен — на каждую изменившуюся таблицу пишется свой файл и сразу накатывается.

Пока модели не менялись, схема берётся из кэша (devcraft/cache/cycle_orm_schema.ser). Повторные запросы не плодят CREATE и не падают с «таблица уже существует».

Если в кэше схема есть, а таблицы в БД нет — кэш не используется. Create-миграцию снимают с «выполнена» только если ни одной её таблицы ещё нет. Если часть таблиц одного файла уже есть, этот файл больше не запускают: повторный CREATE падает и откатывает весь шаг, в том числе журнал (dle_devcraft_logs) или заголовки (dle_dc_public_headers). Cycle пишет отдельный файл на каждую недостающую таблицу, и эти create идут раньше старых правок колонок. Правка, которая падает с «таблица или колонка уже есть», помечается выполненной и не держит очередь. SyncTables — только при включённом debug.

Где смотреть автора

У наследников AbstractEntity: поля creator и lastEditor.

  • При создании оба поля = ID текущего пользователя DLE.
  • При правке меняется только lastEditor.
  • ID берётся из $member_id['user_id'], если он больше нуля; иначе пишется 0. Флаги входа не важны.

Запись идёт через поведения Cycle (CreatedByHook, UpdatedByHook). Метод beforeSave() автора больше не ставит.

На этой странице