【发布时间】:2018-07-24 13:49:39
【问题描述】:
我启动了一个运行 5.6 的新 laravel 应用程序,并简化了我在运行 migrate 之前一次创建多个迁移的过程。 我有大量用于链接的外键,以使我的数据库易于扩展。
我的问题是尝试在迁移后期出现的数据库中引用外键。我相信它不起作用,因为我试图引用的表尚未按操作顺序创建。
例如:
create_users_table迁移:
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->integer('user_id')->nullable()->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->integer('type_id')->nullable()->unsigned();
$table->foreign('type_id')->references('type_id')->on('types');
$table->integer('post_id')->nullable()->unsigned();
$table->foreign('post_id')->references('post_id')->on('posts');
$table->rememberToken();
$table->timestamps();
例如:create_types_table 迁移:
$table->increments('id');
$table->string('type');
$table->integer('user_id')->nullable()->unsigned();
$table->foreign('user_id')->references('user_id')->on('users')->nullable();
$table->integer('revenue_id')->nullable()->unsigned();
$table->foreign('revenue_id')->references('revenue_id')->on('revenue')->nullable();
$table->integer('hours_id')->nullable()->unsigned();
$table->foreign('hours_id')->references('hours_id')->on('hours')->nullable();
$table->integer('project_id')->nullable()->unsigned();
$table->foreign('project_id')->references('project_id')->on('projects')->nullable();
$table->integer('type_id')->nullable()->unsigned();
$table->foreign('type_id')->references('id')->on('types');
$table->timestamps();
我在所有表格中都遵循相同类型的模式。 我想我的问题是;这是因为表还没有创建,所以没有什么可以参考的吗?有没有办法解决这个问题,还是我需要重新启动,创建所有表,然后为每个表添加另一个迁移以添加外键?
这可能是一个愚蠢的问题,我对 laravel 还很陌生。这是我第一次尝试这么早地将关系添加到应用程序中。
【问题讨论】:
-
您可以进行多次迁移,也可以将您的迁移分成多个
Schema::create/Schema::table块。 -
您不能引用尚未创建的表。但是如果没有看到实际的错误,很难判断这是否是问题所在。
-
如果
create_users_table在create_types_table之前运行,你肯定会收到一个引用不存在的表的错误(types)。