Ответ 1
Вам не повезло!!
Сначала, удалите все внешние ключи из всех таблиц, которыми управляет D2. Скопируйте и выполните результат этого запроса:
SET SESSION group_concat_max_len=8192; -- // increase this if you do not see the full list of your tables
SELECT IFNULL(REPLACE(GROUP_CONCAT('ALTER TABLE ',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,'; '), ',', ''), '') FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='FOREIGN KEY';
Затем переопределяет метод supportsForeignKeyConstraints()
в /vendor/doctrine-dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php
(или везде, где этот класс находится):
public function supportsForeignKeyConstraints()
{
return false;
}
Это остановит Doctrine от создания ограничений внешнего ключа для следующей команды doctrine:schema:update
. После этого вы можете просто выполнить инструкцию ALTER TABLE PARTITION BY...
, где это необходимо (D2 не поддерживает разделение на уровне схемы). Я рекомендую сначала создать резервную копию и обрезать ваши таблицы (используя --no-create-info
), чтобы изменения структуры выполнялись как можно быстрее, а затем восстанавливали их.
Как говорит этот человек здесь, и, основываясь на моем личном опыте, D2 не волнует, есть ли у вас FK или нет, если правильные определения отношений на месте.
PS: В настоящее время я работаю над расширением синтаксиса аннотации для поддержки правильных определений таблиц и столбцов, в том числе ENGINE
(этот может быть полезен), PARTITION BY
и @Column options
(т.е. {"fixed"=true, "unsigned"=true, "default"=0}
)
Общее усилие составляет пару бессонных ночей для обратного проектирования и патчей кода, надеюсь, что вы сделаете это быстрее:)