Эта проблема
Я хочу добавить внешние ключи в таблицы. Когда я запускаю свою первую миграцию create_posts_table
, она выглядит так:
Schema::create('posts', function(Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->unsignedInteger('user_id')->index();
// . . .
});
Schema::table('posts', function(Blueprint $table)
{
$table->foreign('user_id')->references('id')
->on('users')->onDelete('cascade');
});
Выдается следующая ошибка:
[Illuminate\Database\QueryException] SQLSTATE[HY000]:
Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL: изменить таблицу
posts
добавить ограничениеposts_user_id_foreign
внешний ключ (user_id
) ссылается наusers
(id
) при удалении каскада)
Это вызвано тем, что таблица users
еще не создана, поэтому не удается создать внешний ключ, ссылающийся на пользователя, в таблице posts
.
Возможное решение
Решением этой проблемы будет добавление внешних ключей с новой миграцией после создания всех таблиц. Однако мне он кажется хлипким.
Вопрос
Как я могу определить внешние ключи в миграциях соответствующих таблиц вместо того, чтобы добавлять их отдельно с другой миграцией после того, как все таблицы были созданы?