Laravel 5.x 中 onUpdate / onDelete 的可用操作
Available actions for onUpdate / onDelete in Laravel 5.x
如here中所述,我们可以在迁移中建立关系时使用单词cascade
但我想知道当 deleting
或 updating
外键
时,他们对其他操作没有任何说明
所以我不确定有没有这样的东西:
$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();
如here中所述,我们可以在迁移中建立关系时使用单词cascade
但我想知道当 deleting
或 updating
外键
时,他们对其他操作没有任何说明
所以我不确定有没有这样的东西:
$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();