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

时间:2016-09-15 18:38:10

标签: laravel laravel-5 laravel-migrations

正如here中所述,我们可以在迁移中建立关系时使用cascade这个词 但是我想知道当deletingupdating外键时,他们没有说出其他行动
所以我不确定是否有这样的事情:

$table->foreign('user_id')
  ->references('id')->on('users')
  ->onDelete('set null');
  //->onDelete('set_null');
  //->onDelete('setNull');

或关于onUpdate和约no action的相同内容,就像phpMyAdmin

一样

enter image description here


感谢

3 个答案:

答案 0 :(得分:14)

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

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

// do not call the onDelete() method if you want the NO ACTION option.

您必须确保将外键字段设置为可为空:

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

答案 1 :(得分:0)

参考源代码:

`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}";
    }

因此,请确保您通过以下其中一项:“级联”,“无操作”,“限制”或“设置为空”

注意: 不要 在诸如 “ set_null”和“ no_action” 等动作中使用下划线>

答案 2 :(得分:0)

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