Skip to content

fix(migrations): resolve ms3_grid_fields missing on install (#270)#294

Open
Ibochkarev wants to merge 1 commit into
betafrom
fix/270-grid-fields-migration
Open

fix(migrations): resolve ms3_grid_fields missing on install (#270)#294
Ibochkarev wants to merge 1 commit into
betafrom
fix/270-grid-fields-migration

Conversation

@Ibochkarev
Copy link
Copy Markdown
Member

Описание

Закрывает root cause issue #270: при установке MiniShop3 seed-миграции падали или пропускались из‑за отсутствия таблицы ms3_grid_fields.

Изменения:

  • initial_schema: fail-fast — при ошибке createObjectContainer() или если таблица не появилась после создания, миграция бросает RuntimeException с перечнем проблемных таблиц (вместо тихого продолжения).
  • msGridField: created_at / updated_at переведены с timestamp на datetime для совместимости с MySQL 5.7 (два TIMESTAMP DEFAULT CURRENT_TIMESTAMP в одной таблице — частая причина сбоя CREATE TABLE на хостингах).
  • Repair-миграция 20260522120000_repair_grid_fields_if_missing.php: self-heal для установок, где таблица отсутствует или отдельные grid-ключи пусты (в т.ч. после no-op seed из бага [Bug] Double table_prefix in PR #271 defensive checks — seed migrations become silent no-op everywhere #276). Patch-миграции запускаются только для затронутого grid-ключа, без перезаписи уже настроенных гридов.

PR #271 и #276 закрывали симптомы (defensive checks и двойной префикс); этот PR дополняет их исправлением первопричины и восстановлением данных.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #270

Как это было протестировано?

  • Ручное тестирование
  • Автоматические тесты (PHPStan, ESLint)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: текущая ветка
  • MODX: 3.x
  • PHP: 8.x

Проверки:

  • php -l для изменённых PHP-файлов миграций и модели msGridField

Скриншоты (если применимо)

До После
N/A N/A

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en) — не требуется
  • PHPStan проходит без новых ошибок
  • ESLint проходит без ошибок (для JS/Vue изменений) — не затронуто
  • Обновлён CHANGELOG.md (для значимых изменений) — по политике репозитория запись добавляется maintainer при релизе

Дополнительные заметки

  • Repair-миграция переиспользует существующие seed/patch-классы через require_once + scoped up() только для пустых grid_key.
  • DDL-изменение datetime применяется при новом CREATE TABLE; существующие таблицы с TIMESTAMP не мигрируются автоматически.

Stop initial_schema from silently continuing when table creation fails,
use datetime columns for msGridField on MySQL 5.7, and add a scoped
repair migration for installs with empty grid configs.
@Ibochkarev Ibochkarev requested a review from biz87 May 22, 2026 08:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Migration failed: Table ms3_grid_fields does not exist

1 participant