Схема шлюза БД и автор записи v200.4.1
Как Admin приводит таблицы Cycle к моделям и кто пишется в creator / lastEditor.
Когда схема обновляется сама
Шлюз DatabaseGateway перед работой ORM вызывает SchemaSyncService::ensureSchemaReady().
- Сначала накатываются все ещё не применённые файлы в
devcraft/src/database/migrations/(и при включённом debug тоже). - Если в настройках Admin включён debug — отличия схемы и базы применяются «на лету» (
SyncTables), новые файлы не появляются. - Если 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() автора больше не ставит.