Миграция из приращений в bigIncrements из существующей таблицы - PullRequest
4 голосов
/ 03 ноября 2019

Я искал вопросы на форумах и форумах о том, как перенести изменения с increments() на bigIncrements() с использованием существующих таблиц.

Ошибка: SQLSTATE[HY000]: General error: 1833 Cannot change column 'id': used in a foreign key constraint 'account_users_acc_id_foreign' of table 'mydatabasename.account_users' (SQL: ALTER TABLE accounts CHANGE id id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL)

Я знаю, что это из-за внешней таблицы, затем я попытался отключить ограничение, используя Schema::disableForeignKeyConstraints()

Ошибка: SQLSTATE[HY000]: General error: 1025 Error on rename of './mydatabasename/#sql-ea_201' to './mydatabasename/accounts' (errno: 150 - Foreign key constraint is incorrectly formed) (SQL: ALTER TABLE accounts CHANGE id id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL)

в моей функции up():

enter image description here

Я также пытался изменить порядок циклов

Ошибка: SQLSTATE[HY000]: General error: 1832 Cannot change column 'acc_id': used in a foreign key constraint 'account_users_acc_id_foreign' (SQL: ALTER TABLE account_users CHANGE acc_id acc_id BIGINT UNSIGNED DEFAULT NULL, CHANGE app_user_id app_user_id BIGINT UNSIGNED NOT NULL, CHANGE approved_by approved_by BIGINT UNSIGNED DEFAULT NULL, CHANGE rejected_by rejected_by BIGINT UNSIGNED DEFAULT NULL)

Есть ли способ решить эту проблему?



Ссылки:

Доктрина DBAL: https://www.doctrine -project.org / projects / doctrine-dbal / en / 2.9 / reference / schema-manager. HTML

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Не могли бы вы:

  1. Сохранить внешние ключи каждой таблицы в массиве [$table_name => $array_of_foreign_keys]
  2. Удалить все внешние ключи
  3. Изменить столбец id каждой таблицыдля использования bigIncrements
  4. Измените каждый столбец внешнего ключа на тип unsigned big integer
  5. Выполните цикл по массиву с шага 1, воссоздав все внешние ключи (с помощью циклического перебора каждого внешнего ключа по имени таблицы)
0 голосов
/ 04 ноября 2019

Я пытался реализовать, как предложено @brice. на данный момент он работает ..

ниже код миграции. я не знаю, это лучшая практика или нет

это моя суть: https://gist.github.com/afiqiqmal/6518a2048246cd76c03bdee04ff87a82

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...