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

Available actions for onUpdate / onDelete in Laravel 5.x

here中所述,我们可以在迁移中建立关系时使用单词cascade
但我想知道当 deletingupdating 外键
时,他们对其他操作没有任何说明
所以我不确定有没有这样的东西:

$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()

它只是将您传入的任何内容附加到 table 查询。

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

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

因此,请确保您传递了以下其中一项: "cascade"、"no action"、"restrict" 或 "set null"

注意:不要"set_null"等操作中使用下划线和 "no_action"

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',您必须确保字段可为空

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