Миграционные таблицы с разным уровнем - PullRequest
0 голосов
/ 06 ноября 2019

Если у меня есть таблицы со связями (родительская и дочерняя таблицы), могу ли я перенести их вместе сразу или мне нужно сначала перенести дочерний элемент?

Ответы [ 2 ]

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

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

, а миграция потомка сначала вызовет ошибку

Подсветка \ База данных \QueryException: SQLSTATE [HY000]: общая ошибка: 1005 Невозможно создать таблицу database. child (номер ошибки: 150 «Неправильно сформировано ограничение внешнего ключа»)

Поэтому необходимо выполнить миграциюсначала родитель

Например, представьте, что у пользователя есть домашнее животное (домашнее животное)

У нас будет users таблица и pets таблица настроек

Schema::create('pets', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('user_id');
    $table->foreign('user_id')->references('id')->on('users');
    $table->timestamps();
});

Если имя файла для миграции домашних животных -

2013_11_06_151235_create_pets_table.php

И имя файла для миграции users -

2014_10_12_000000_create_users_table.php

Вы получите сообщение об ошибке выше, поэтому вам придется переименоватьpets файл переноса таблицы на дату позже, чем дата из users

, например

2015_11_06_151235_create_pets_table.php

Поскольку Laravel попытается создать таблицу базы данных со столбцом, ссылающимся на столбец втаблица, которая еще не существует

Надеюсь, это поможет

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

Если у вас нет ограничений по внешнему ключу, вы можете выполнить миграцию в любом порядке. Однако, если у вас есть внешний ключ (FK), это зависит от вашей схемы, а также вы могли бы выиграть от указания правил ON UPDATE и ON DELETE для своих таблиц. См. MySQL документов для этого.

...