Добавьте ограничения внешнего ключа в миграцию Laravel

Я знаю, что многие люди задавали один и тот же вопрос много раз, но мне кажется, что я не могу заставить одни и те же решения работать на меня.

Я не могу установить внешний ключ для связанных таблиц, для которых up() было дано ниже:

//Migrate 1 Starts
public function up()
{
Schema::create("UserTable", function($table){
$table->tinyInteger("ApplicationID");
$table->bigInteger("UserID");
$table->string("UserName")->unique();
$table->timestamps();
});
}
//Migrate 1 Ends

//Migrate 2 Starts
public function up()
{
Schema::create("Membership", function($table){
$table->tinyInteger("ApplicationID");
$table->bigInteger("UserID");
$table->string("Password");
}
}
//Migrate 2 Ends

//Migrate 3 Starts: This has the latest timestamp, so it runs after all tables are created
public function up()
{
Schema::table('UserTable', function($table) {
$table->primary("UserID");
$table->foreign("UserID")->references("UserID")->on("Membership");
});

Schema::table('Membership', function($table) {
$table->primary("UserID");
$table->foreign("UserID")->references("UserID")->on("UserTable");
});
}
//Migrate 3 Ends

Я получаю ошибку SQLSTATE[HY000]: General rror: 1215 Cannot add foreign key constraint (SQL: alter table 'Membership' add constraint membership_userid_foreign foreign key ('UserID') references 'UserTable' ('UserID'))

0

Решение

Проблема была в том, что я настраивал первичный ключ во время настройки внешнего ключа. Это было причиной проблемы.

Таким образом, настройка первичных столбцов должна выполняться при создании таблиц, а внешние ключи должны добавляться после создания всех связанных таблиц.

Я думаю, что лучше, чтобы мы создали create_associations Файл миграции после того, как все таблицы были созданы, чтобы эта миграция имела самую последнюю временную метку, и к тому времени, когда этот файл будет выполнен, все таблицы будут присутствовать в базе данных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]