繁体   English   中英

Laravel - 1215无法添加外键约束

[英]Laravel - 1215 Cannot add foreign key constraint

我尝试在迁移中添加外键约束。 出于某种原因,当我将其设置为可空时,它确实有效,但是当它使其不可为空时它不起作用。 为什么会发生这种情况,我该如何解决?

这确实有效:

Schema::create('role_user', function (Blueprint $table){
        $table->increments('id');

        $table->integer('role_id')->unsigned()->index()->nullable();
        $table->foreign('role_id')->references('id')->on('roles')->onDelete('set null');

        $table->integer('user_id')->unsigned()->index()->nullable();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');

         $table->timestamps();
    });

这引发了异常:

Schema::create('role_user', function (Blueprint $table){
        $table->increments('id');

        $table->integer('role_id')->unsigned()->index();
        $table->foreign('role_id')->references('id')->on('roles')->onDelete('set null');

        $table->integer('user_id')->unsigned()->index()->nullable();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('set null');

         $table->timestamps();
    });

在进行这些约束之前,角色和用户表都已经过了。 我希望它们不可为空(所以必须填写)。 错误:

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table role_user add constraint role_user_role_id_foreign foreign key (role_id) references roles (id) on delete set null)

迁移按您在文件名中指定的顺序进行。 也许您的角色表尚未在运行此迁移时创建,并且您的数据库抱怨尝试引用(尚未)不存在的表中的字段?

例如: 2016_03_27_0000_first将在2016_03_28_0000_second之前执行

更新:添加解决方案。

我注意到你有“onDelete('set null')”对于你试图设置为非可空的字段。 如果角色被删除,这也会导致问题,因为它会尝试将值设置为null。

您应该将两个外键都设置为:

->onDelete('cascade')

这样,如果用户或角色被删除,任何与它们相关的关联也将自动删除,而不是简单地设置为空或左边。

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM