Laravel Schema onDelete设置默认值

时间:2016-12-23 13:39:09

标签: laravel-5 foreign-keys

我有两个具有一对一关系的表,由外键约束设置。我想将onDelete规则设置为'设置默认值',这意味着当删除外表上的行时,引用值将恢复为其默认值。这是我的代码:

图表:

    Schema::create('tours', function (Blueprint $table) {
        $table->increments('id')->unsigned()->index();
        $table->integer('grade')->unsigned()->default(1);
        $table->timestamps();
    });

等级表:

    Schema::create('grades', function(Blueprint $table){
        $table->increments('id')->unsigned()->index();
        $table->string('name');
        $table->timestamps();
    });

设置外键:

    Schema::table('tours', function (Blueprint $table) {
        $table->foreign('grade')->references('id')->on('grades')->onDelete('set default');
    });

当我运行迁移时,它可以正常工作 - 没有错误。但是,看看HeidiSQL中的表格,它还没有正常工作;外键已设置,但onDelete属性只显示' NO ACTION'。

随后,当我删除了成绩表中的一行时,出现了外键约束错误。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

已经有一段时间了,但这取决于数据库使用的引擎。如果您使用InnoDBNDB,则语法将被解析但会被忽略

检查MySQL文档的this section

引用动作

...

SET DEFAULT:MySQL解析器可以识别此操作,但是InnoDBNDB 拒绝表定义都包含ON DELETE SET DEFAULT或{{ 1}}条款。

您可以改用ON UPDATE SET DEFAULT来满足您的需要。如果没有,那么您可以创建一个observer来为您执行此操作。