【发布时间】:2019-11-06 15:03:21
【问题描述】:
当我有具有关系的表(父表和子表)时,我可以同时迁移它们还是需要先迁移子表?
【问题讨论】:
-
先迁移父节点
标签: laravel eloquent eloquent-relationship
当我有具有关系的表(父表和子表)时,我可以同时迁移它们还是需要先迁移子表?
【问题讨论】:
标签: laravel eloquent eloquent-relationship
您不能一次迁移两个表,代码不会并行处理
而且先迁移孩子会报错
Illuminate\Database\QueryException : SQLSTATE[HY000]: 一般错误: 1005 无法创建表
database.child(errno: 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 会尝试创建一个数据库表,其中一个列引用了一个尚不存在的表中的列
希望对你有帮助
【讨论】:
如果您没有外键约束,那么您可以按任意顺序迁移。但是,如果您确实有外键 (FK),那么这取决于您的方案,那么您也可以从为您的表指定 ON UPDATE 和 ON DELETE 规则中受益。请参阅mysql docs。
【讨论】: