Как безопасно откатить первичные индексы в базе данных MySql с помощью миграций Laravel - PullRequest
2 голосов
/ 16 мая 2019

Я использовал библиотеки ролей и разрешений Entrust для Laravel и Lumen.Хотя у меня была причина использовать его не так, как предполагалось, из-за моего уникального случая.Мне нужно было иметь несколько экземпляров пользователя с одинаковой ролью, дифференцированным определенным внешним ключом.

Предположим, я хотел, чтобы пользователь имел одинаковую роль для разных заданий или разные роли для разных заданий, поэтому я добавил job_id в таблицу role_users, чтобы помочь мне отфильтровать роли, которые выполняет пользователь для определенного задания...

Это просто означает, что пользователь может быть администратором для job1 и администратором для job2 .. Это создавало проблему, потому что поручили некоторым как сделать первичные ключи role_id и user_id в таблице role_users ..

Сначала я не думал, что это возможно, плюс я не понимаю, почему .. Это также означает, что у меня не может быть нескольких экземпляров одного и того же role_id и user_id, которые я хотел.Я провел небольшое исследование и выяснил, что могу сбросить первичный ключ, используя метод $table->dropPrimary().

Я сделал это в своем методе up(), хотя действие необходимо повторить в моем методе down.Я не могу создать первичный ключ там, потому что, если несколько экземпляров уже существуют, это приведет к фатальному исключению.

По сути, мне нужен способ отбросить первичный ключ при условии, что он существует, поэтому мне не нужно заново создавать его в методе down.

1 Ответ

0 голосов
/ 16 мая 2019

В этом случае вам не нужно помещать что-либо в down().

Мое обычное правило для помещения чего-либо в down() - это когда up() содержит что-то, что помешает моей миграции откатитьсяуспешно.

В вашем случае удаление первичного ключа никак не повлияет на откат.

Если вам действительно нужен этот откат.Вы можете добавить некоторый скрипт, который обрабатывает дубликаты в вашей таблице, и снова применить первичный ключ

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