Конструктор моделей
Создать таблицу и получить миграцию и модель — прямо из менеджера, не открывая редактор. PageBlocks → Конструктор → Миграции.
Только для sudo
Все его маршруты закрыты middleware SudoOnly. Он пишет файлы в core/App/ и запускает миграции по живой базе, так что контент-менеджеру здесь делать нечего.
Что получается
Одна строка конструктора превращается в три вещи:
- миграцию Phinx в
core/App/Database/migrations/; - после её выполнения —
core/App/Models/Base<Модель>.php, собранную по настоящим колонкам таблицы; core/App/Models/<Модель>.php— только если его ещё нет.
Разделение здесь принципиально: базовый класс перегенерируется при каждом прогоне, дочерний пишется один раз и больше не трогается. Ваши методы, связи и касты живут в дочернем.
Базовую модель править нельзя
Она молча перезапишется при следующей миграции по этой таблице.
Поля строки
| Поле | Что это |
|---|---|
name | Человеческое название, видно в списке |
table_name | Таблица, без префикса |
model_name | Класс модели для генерации. Пусто — «только миграция» |
table_comment | Комментарий к таблице |
type | Что делает миграция — см. ниже |
status | pending, executed, rolled_back, failed |
with_constructor_fields | Добавить хвост конструктора — data, menuindex, published_at |
with_timestamps | Добавить created_at / updated_at |
with_soft_deletes | Добавить deleted_at |
Все три галочки по умолчанию включены: созданная здесь таблица сразу готова к публикации, сортировке, корзине и полям конструктора, и думать об этом не нужно.
Типы
create_table, drop_table, add_column, change_column, drop_column, rename_column, add_index, drop_index, add_foreign_key, drop_foreign_key.
Колонки описываются в дочернем гриде — тип, длина, точность, nullable, unsigned, значение по умолчанию, комментарий, after и индекс с его видом (index, unique, fulltext). Внешние ключи — отдельный грид, с on_delete и on_update.
Запуск
Выполнить пишет файл миграции, прогоняет Phinx по слою сайта (core/App/phinx.php, журнал pb_app_migrations) и затем генерирует модель. Статус становится executed, заполняется executed_at.
Откат разрешён только для миграции в статусе executed — на всё остальное ответ 405.
Текущая форма таблицы берётся не из схемы базы, а пересчитывается по всем выполненным миграциям этой таблицы. Именно это позволяет add_column знать, что у модели уже есть.
У удалённой таблицы файлы остаются
drop_table намеренно не трогает core/App/Models/. Убрать таблицу — решение о схеме, а удалить вашу модель вместе со всем, что вы в ней написали, конструктор решать не должен.
Когда две миграции сталкиваются
Две отдельные строки «добавить колонку в pb_cargo» захотели бы одно имя класса. Сервис проверяет существующие файлы и разводит имена, поэтому вторая миграция по той же таблице не затирает файл первой.
Куда это пишет
Конструктор моделей пишет в слой сайта и никогда — в компонент. Поэтому он безопасен: обновление компонента не может перезаписать сгенерированное, а сгенерированное не может уехать в чужую установку.
Про устройство миграций и два конфига Phinx — Миграции; про то, что умеет сгенерированная модель — Модели.