Миграция (PRO)
Создать таблицу и получить к ней миграцию и модель — прямо из менеджера, не открывая редактор.
PageBlocks → Конструктор → Миграция.
Только для sudo
Вкладка пишет файлы в core/App/ и запускает миграции по живой базе, поэтому закрыта от всех, кроме администратора. Контент-менеджеру здесь делать нечего.
Что получается
Одна строка превращается в три вещи:
- файл миграции Phinx в
core/App/Database/migrations/; - после её выполнения —
core/App/Models/Base<Модель>.php, собранный по настоящим колонкам таблицы; core/App/Models/<Модель>.php— только если его ещё нет.
Разделение принципиальное: базовый класс перегенерируется при каждом прогоне, дочерний пишется один раз и больше не трогается. Ваши методы, связи и касты живут в дочернем.
Базовую модель править нельзя
Она молча перезапишется при следующей миграции по этой таблице.
Список
| Колонка | Что показывает |
|---|---|
| Название | Человеческое имя, видно в списке |
| Таблица, Модель | К чему относится. Пустая модель — «только миграция» |
| Тип | Что делает миграция |
| Статус | Ожидает, Выполнена, Откатана или Ошибка |
| Выполнена | Когда применили |
Создание
| Настройка | Что делает |
|---|---|
| Название | Для списка. Обязательное |
| Имя таблицы | Без префикса, строчные и подчёркивание. Обязательное |
| Имя модели | Подставляется само из имени таблицы. Пусто — модель не генерируется |
| Тип | По умолчанию «создать таблицу» |
| Поля конструктора | Добавит data, menuindex, published_at и прочий хвост |
| Временные метки | created_at и updated_at |
| Мягкое удаление | deleted_at |
Все три галочки по умолчанию включены: созданная здесь таблица сразу готова к публикации, сортировке, корзине и полям конструктора.
Десять типов: создать и удалить таблицу, добавить, изменить, удалить и переименовать колонку, добавить и удалить индекс, добавить и удалить внешний ключ.
Колонки описываются в дочернем гриде — тип, длина, точность, nullable, unsigned, значение по умолчанию, комментарий, after и индекс с его видом (index, unique, fulltext). Внешние ключи — отдельный грид, с on_delete и on_update.
Выполнение и откат
Выполнить пишет файл миграции, прогоняет Phinx по слою сайта и затем генерирует модель. Статус становится «Выполнена».
Откат разрешён только для выполненной миграции — на всё остальное ответ 405. Лог выполнения сохраняется и открывается кнопкой просмотра, в том числе у упавшей миграции: это первое место, куда смотреть, если не получилось.
Откат отменяет изменение, а не возвращает данные
Откат «удалить колонку» вернёт колонку, но не то, что в ней лежало. Перед разрушающей миграцией на боевом сайте делайте дамп — компонент его не делает.
Текущая форма таблицы берётся не из схемы базы, а пересчитывается по всем выполненным миграциям этой таблицы. Именно поэтому add_column знает, что у таблицы уже есть.
У удалённой таблицы файлы моделей остаются
drop_table намеренно не трогает core/App/Models/. Убрать таблицу — решение о схеме, а удалять вашу модель вместе со всем, что вы в ней написали, конструктор не должен.
Когда две миграции сталкиваются
Две строки «добавить колонку в pb_cargo» захотели бы одно имя класса. Имена разводятся по существующим файлам, поэтому вторая миграция по той же таблице не затирает первую.
Куда это пишет
Только в слой сайта, никогда в компонент. Отсюда и безопасность: обновление компонента не перезапишет сгенерированное, а сгенерированное не уедет в чужую установку.
Написать миграцию руками — Миграции; что умеет сгенерированная модель — Модели.