正如here中所述,我们可以在迁移中建立关系时使用cascade
这个词
但是我想知道当deleting
或updating
外键时,他们没有说出其他行动
所以我不确定是否有这样的事情:
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('set null');
//->onDelete('set_null');
//->onDelete('setNull');
或关于onUpdate
和约no action
的相同内容,就像phpMyAdmin
感谢
答案 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();