Laravel 5.x中的onUpdate/onDelete可用操作

Laravel 5.x中的onUpdate/onDelete可用操作,laravel,laravel-5,laravel-migrations,Laravel,Laravel 5,Laravel Migrations,如中所述,在迁移中建立关系时,我们可以使用单词cascade 但我想知道,当删除或更新外键时,他们没有说任何其他操作 所以我不确定是否有这样的事情: $table->foreign('user_id') ->references('id')->on('users') ->onDelete('set null'); //->onDelete('set_null'); //->onDelete('setNull'); 或者与onUpdate和no

如中所述,在迁移中建立关系时,我们可以使用单词
cascade
但我想知道,当
删除
更新
外键时,他们没有说任何其他操作

所以我不确定是否有这样的事情:

$table->foreign('user_id')
  ->references('id')->on('users')
  ->onDelete('set null');
  //->onDelete('set_null');
  //->onDelete('setNull');
或者与
onUpdate
no action
一样,就像
phpMyAdmin



谢谢

您可以通过以下方式执行
phpmyadmin
中提到的所有选项:

$table->...->onDelete('CASCADE');
$table->...->onDelete('SET NULL');
$table->...->onDelete('RESTRICT');

// do not call the onDelete() method if you want the RESTRICT option.
您必须确保将外键字段设置为可空:

$table->...->unsigned()->nullable();

参考源代码:

`vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php` in the function compileForeign()
它只是将您传入的内容附加到表查询中

    if (! is_null($command->onDelete)) {
        $sql .= " on delete {$command->onDelete}";
    }

    if (! is_null($command->onUpdate)) {
        $sql .= " on update {$command->onUpdate}";
    }
因此,请确保您传递了以下选项之一:“级联”、“无操作”、“限制”或“设置空值”


注意:在诸如“设置空值”和“无操作”之类的操作中不要使用下划线。

onUpdate也可用


$table->foreign('user_id')->references('id')->on('users')
->onDelete('SET NULL')
->onUpdate('SET NULL'); // also available CASCADE, RESTRICT, DO NOTHING, NO ACTION

要使用“SET NULL”,必须确保字段可为NULL

$table->integer('user_id')->nullable();


您的评论不正确-如果您不调用
onDelete
,那么它默认为“RESTRICT”,至少在MySQL中是这样。