Php 拉威尔6。常规错误:1215无法添加外键约束
将数据库表引擎定义为innoDB后,我正在浏览下面的错误消息。我尝试了那里的一切,但都不起作用。可以看出,我正在使用Php 拉威尔6。常规错误:1215无法添加外键约束,php,laravel,Php,Laravel,将数据库表引擎定义为innoDB后,我正在浏览下面的错误消息。我尝试了那里的一切,但都不起作用。可以看出,我正在使用biginger和unsignedbiginger作为我的列类型 错误 illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter tableusersadd约束users\u account\u status\u id\u foreign外键(account\u status\u id)引用
biginger
和unsignedbiginger
作为我的列类型
错误
illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table
usersadd约束
users\u account\u status\u id\u foreign外键(
account\u status\u id)引用
状态(
id)删除时设置为空更新级联)
我认为您的模式生成器无法创建外键约束,因为尚未创建STATUSES表
尝试反转迁移顺序(更改构成迁移文件名第一部分的日期,使其符合您想要的顺序(例如,对于2020_01_09_134109_create_users_table.php,日期和时间为2020-01-29,13:41:09)
再次运行迁移。我认为架构生成器无法创建外键约束,因为尚未创建状态表
尝试反转迁移顺序(更改构成迁移文件名第一部分的日期,使其符合您想要的顺序(例如,对于2020_01_09_134109_create_users_table.php,日期和时间为2020-01-29,13:41:09)
再次运行迁移。您可能没有正确定义用户表上的实际外键字段。在指定
外键之前,我希望看到如下情况:
$table->unsignedBigInteger('account_status_id'); // No default 0
$table->foreign('account_status_id')->references('id')->on('statuses')->onUpdate('cascade')->onDelete('set null');
请注意,->缺省值(0)
的丢失,因为这将对可空字段产生问题
.您可能没有正确定义用户表上的实际外键字段。在指定外键之前,我希望看到如下情况:
$table->unsignedBigInteger('account_status_id'); // No default 0
$table->foreign('account_status_id')->references('id')->on('statuses')->onUpdate('cascade')->onDelete('set null');
请注意,->缺省值(0)
的丢失,因为这将对可空字段产生问题
.如何保留迁移顺序?更改构成迁移文件名第一部分的日期,使其符合您想要的顺序(例如,对于2020\u 01\u 09\u 134109\u create\u users\u table.php,日期和时间是2020-01-29,13:41:09I更改了2019\u 12\u 16\u 060000\u create\u users\u table.php
和2019\u 12\u 15\u 053624\u create\u status\u table.php
,以便状态迁移首先运行,但仍然面临相同的问题您是否从数据库中删除所有表并尝试过php artisan迁移:freshYes,我正在运行php artisan migate:fresh
如何保留迁移顺序?更改构成迁移文件名第一部分的日期,使其符合您想要的顺序(例如,对于2020\u 01\u 09\u 134109\u create\u users\u table.php,日期和时间是2020-01-29,13:41:09I更改了2019\u 12\u 16\u 060000\u create\u users\u table.php
和2019\u 12\u 15\u 053624\u create\u status\u table.php
,以便状态迁移首先运行,但仍然面临相同的问题您是否从数据库中删除所有表并尝试过php artisan迁移:freshYes,我正在运行php artisan migate:fresh
我已经定义了外键$table->unsignedBigInteger('account\u status\u id')->default(0)
但是,请尝试不使用默认值-您不能让FK与0匹配-它不能匹配。可以为Nullable,但0可能会对cascade Null造成严重破坏没有更改。这让我现在感到恶心:)。一切看起来都很好,但这个疯狂的错误一直提示我:)这两个表都在运行innoDB吗?正如您所说,我删除了onDelete,迁移运行成功。感谢您的帮助,我已经定义了外键$table->unsignedBigInteger('account\u status\u id')->默认值(0)
但是,请尝试不使用默认值-您不能让FK与0匹配-它不能匹配。可以为Nullable,但0可能会对cascade Null造成严重破坏没有更改。这让我现在感到恶心:)。一切看起来都很好,但这个疯狂的错误一直提示我:)这两个表都在运行innoDB吗?我删除了您提到的onDelete,迁移运行成功。非常感谢