我正在尝试将permission_id外键添加到我的users表中,该表将引用我的权限表中的id . 目前我 Build 了以下迁移:
<?php
class AddPermissionIdForeignKeyToUsersTable extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->unsignedInteger('permission_id')->after('id');
$table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('permission_id');
});
}
}
但我得到以下错误:
SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(眼睛 . #sql-22f0_3dd,CONSTRAINT users_permission_id_foreign FOREIGN KEY(permission_id)REFERENCES参考文献(id)ON DELETE CASCADE)( SQL:alter table users添加约束users_permission_id_foreign外键(permission_id)引用删除级联上的权限(id))在PDOStatement.php第144行:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(眼睛 . #sql-22f0_3dd,CONSTRAINT users_permission_id_foreign FOREIGN KEY(permission_id)REFERENCES p ermissions(id)ON DELETE CASCADE)在PDOStatement.php第142行:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子项row:外键约束失败(眼睛 . #sql-22f0_3dd,CONSTRAINT users_permission_id_foreign FOREIGN KEY(permission_id)REFERENCES p ermissions(id)ON DELETE CASCADE)
1 回答
如果表中的用户已有数据,则需要将字段permission_id声明为可空 .
$table->unsignedInteger('permission_id')->nullable()->after('id');