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中是这样。