【问题标题】:What does onDelete('cascade') mean?onDelete('cascade') 是什么意思?
【发布时间】:2017-08-23 00:02:57
【问题描述】:
Schema::table('posts', function (Blueprint $table) {
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});

这是否意味着如果我删除一个帖子,该用户也会被删除,还是意味着如果我删除一个用户,他们的所有帖子都会被删除?

【问题讨论】:

  • ">onDelete" 应该是 "->onDelete" 并且你有双 ";;"

标签: php laravel


【解决方案1】:

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

onDelete('cascade'); 只是将ON DELETE CASCADE 规则添加到您的数据库中,该规则指定删除父数据时删除子数据。

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

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

【讨论】:

  • 好答案。如果on() 表中的一条记录被删除,这些关联的外键记录也将被删除。另请注意,foreign() 不能链接到列创建语句。
  • @Ryan 如果我不想删除关联的记录,而只是在主表中的记录被删除时取消链接外键怎么办?
【解决方案2】:

您正在谈论的代码创建了一个外键/对另一个表上的列的引用。 onDelete('cascade') 表示当该行被删除时,它也会删除它的所有引用和附加数据。

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

您可以在Laravel excellent documentation找到更多信息。

【讨论】:

  • 这个答案不正确。当用户有多个帖子时,子表是帖子,父表是用户。由于外键约束总是在子表上定义,它会在posts表上定义。因此,onDelete('cascade') 将在 user 表上定义,而不是在 posts 表上。只有这样,删除用户才会级联导致删除她的所有帖子。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多