不同级别的迁移表

时间:2019-11-06 15:03:21

标签: laravel eloquent eloquent--relationship

当我有关系表(父表和子表)时,可以一次将它们一起迁移吗?还是需要先迁移子表?

2 个答案:

答案 0 :(得分:1)

如果没有外键约束,则可以按任何顺序迁移。但是,如果确实有外键(FK),则它取决于您的方案,那么您也可以从为表指定ON UPDATEON DELETE规则中受益。有关详情,请参见mysql docs

答案 1 :(得分:1)

您不能一次迁移两个表,代码不会在并行处理中运行

首先迁移孩子会导致错误

  

Illuminate \ Database \ QueryException:SQLSTATE [HY000]:常规错误:1005无法创建表databasechild(错误号: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将尝试创建一个数据库表,该数据库表的列引用了尚不存在的表中的列

希望这会有所帮助