onDelete('cascade')是什么意思?

cod*_*441 16 php laravel

Schema::table('posts', function (Blueprint $table) {
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')
});
Run Code Online (Sandbox Code Playgroud)

这是否意味着如果我删除帖子,用户也将被删除或者是否意味着如果我删除用户,他们的所有帖子都将被删除?

M.E*_*wan 38

简短的回答是:在您的情况下,如果您删除了a user,则与他相关的所有帖子也将被删除.

onDelete('cascade');只需ON DELETE CASCADE向数据库添加规则,该规则指定在删除父数据时删除子数据.

注意:处理错字(双分号)

$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

  • 好答案。如果“ on()”表中的记录被删除,则这些关联的外键记录也将被删除。还要注意,foreign()不能链接到列创建语句。 (2认同)

Hyd*_* B. 8

您正在讨论的代码创建了另一个表上的列的外键/引用.这onDelete('cascade')意味着当删除行时,它将删除所有它的引用和附加数据.

例如,如果您有一个具有Post的用户并且您在用户上设置了onDelete('cascade'),那么当用户删除他的帐户时,所有帖子也将被删除.

您可以在Laravel优秀文档中找到更多信息.

  • 不清楚您在说什么,似乎与已接受的答案相矛盾。 (2认同)
  • 这个答案是不正确的。当一个用户有多个帖子时,子表是帖子,父表是用户。由于外键约束始终在子表上定义,因此它将在 posts 表上定义。因此,`onDelete('cascade')` 将在 *user* 表上定义,而不是 *posts* 表上。只有这样,删除一个用户才会导致她的所有帖子被删除。 (2认同)

hal*_*oei 5

如果您使用的是 mysql,请查看文档

在您的情况下,这意味着:如果用户被删除,帖子也将被删除。


Pet*_*aul 5

这意味着如果您删除链接的“用户”,链接到该用户的“帖子”也将自动删除。