Схема шлюза БД и автор записи v200.4.2
Как 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 идут раньше старых правок колонок. Правка, которая падает с «таблица или колонка уже есть», помечается выполненной и не держит очередь.
Если после файлов миграций таблиц всё ещё нет (чистая база или ложная отметка «выполнена»), один раз применяется создание «на лету». На следующих запросах, когда таблицы уже есть, этот запасной проход не запускается.
На главной панели есть кнопка Создать / обновить таблицы. Она сбрасывает запас копии схемы и снова приводит таблицы к моделям. Уже записанные строки не удаляются. Если чего-то не хватает, на экране будет текст ошибки.
Где смотреть автора
У наследников AbstractEntity: поля creator и lastEditor.
- При создании оба поля = ID текущего пользователя DLE.
- При правке меняется только
lastEditor. - ID берётся из
$member_id['user_id'], если он больше нуля; иначе пишется0. Флаги входа не важны.
Запись идёт через поведения Cycle (CreatedByHook, UpdatedByHook). Метод beforeSave() автора больше не ставит.