不同级别的迁移表
Migration tables with different level
当我有 table 关系(parent 和 child table)时,我可以立即将它们一起迁移还是我需要迁移 child第一?
如果您没有外键约束,那么您可以按任意顺序迁移。但是,如果您确实有外键 (FK),那么它取决于您的方案,那么您也可以从为表指定 ON UPDATE
和 ON DELETE
规则中受益。请参阅 mysql docs。
您不能一次迁移两个 table,代码不会 运行 并行处理
而且先迁移子进程会报错
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1005 Can't create table database
.child
(errno: 150 "Foreign key constraint is incorrectly formed")
所以你必须先迁移父级
例如,假设用户有一只宠物(家养动物)
我们会有 users
table 和 pets
table 设置
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
table 迁移文件重命名为晚于 users
的日期
例如
2015_11_06_151235_create_pets_table.php
因为 Laravel 将尝试创建一个数据库 table,其中一列引用 table 中尚不存在的列
希望对您有所帮助
当我有 table 关系(parent 和 child table)时,我可以立即将它们一起迁移还是我需要迁移 child第一?
如果您没有外键约束,那么您可以按任意顺序迁移。但是,如果您确实有外键 (FK),那么它取决于您的方案,那么您也可以从为表指定 ON UPDATE
和 ON DELETE
规则中受益。请参阅 mysql docs。
您不能一次迁移两个 table,代码不会 运行 并行处理
而且先迁移子进程会报错
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1005 Can't create table
database
.child
(errno: 150 "Foreign key constraint is incorrectly formed")
所以你必须先迁移父级
例如,假设用户有一只宠物(家养动物)
我们会有 users
table 和 pets
table 设置
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
table 迁移文件重命名为晚于 users
例如
2015_11_06_151235_create_pets_table.php
因为 Laravel 将尝试创建一个数据库 table,其中一列引用 table 中尚不存在的列
希望对您有所帮助