Я взломал это.
По какой-то веселой причине автоматически сгенерированные классы миграции названы так:
1311678541_add<table-name>.php
1311678542_add<table-name>.php
1311678543_add<table-name>.php
...
13116785578_addfks.php
...
1311678579_add<table-name>.php
1311678580_add<table-name>.php
1311678582_addproductgroup.php
Файл 13116785578_addfks.php
появляется перед 1311678582_addproductgroup.php
.
Файл 13116785578_addfks.php
, содержащий класс, который создает все отношения (внешние ключи и ограничения), но пытается добавить ограничение на несуществующую таблицу (в моем случае product_group
, которая будет создана последней). Итак, ошибка SQL означает YOU ARE TRYING TO CREATE A RELATION WITH UNEXISTING TABLE, YOU MORON!
:)
Мое решение - переименовать 13116785578_addfks.php
в 13116785590_addfks.php
, поскольку это заставляет машину слияния доктрин выполнить ее в качестве последнего шага. Когда все выполнено, все таблицы уже созданы, и сервер MySQL счастлив!
Итак, как насчет причины такого неправильного заказа?
Вероятно, это вызвано смешиванием задач doctrine:generate-migrations-db
и doctrine:generate-migrations-models
,
но с этим урок Symfony по миграции не очень понятен.
Почему я использую их обоих?
Когда я сделал ./symfony doctrine:generate-migration-db
, была создана только половина классов для миграции. Странно - есть только общие таблицы и никаких связанных! Поэтому я позвонил doctrine:generate-migrations-models
.
Заключение
Другой вопрос: почему doctrine:generate-migrations-db
не генерирует классы миграции для связанных таблиц модели?