当删除具有关联的实体时,所有相关数据都被删除但想在 symfony 中保留关联数据

When deleting an entity with associate all related data is deleted but want to keep associate data in symfony

我有两个实体如下:-

  1. 网站
  2. Posts

在网站实体中,我给出了 OneToMany 关系,在帖子实体中,我给出了 ManytoOne 关系。

网站实体:-

/**
 * @var Collection<Post>
 *
 * @ORM\OneToMany(targetEntity="App\Domain\Entity\Post\Post", mappedBy="website", cascade={"all"})
 */
 private Collection $posts;

Post实体:-

/**
 * @ORM\ManyToOne(targetEntity="App\Domain\Entity\Website\Website", inversedBy="posts")
 * @ORM\JoinColumn(name="website_id", referencedColumnName="id", onDelete="SET NULL")
 */
private ?Website $website = null;

问题是,当我删除一个如此相关的网站时,该网站的所有帖子都被删除了,但我想保留该网站的相关帖子(我有已删除的网站)。

您已在 $posts 上设置 cascade={"all"}all 是“坚持、删除、合并、分离、刷新”的别名。

这是文档中关于 Cascade Operations 的内容:

Even though automatic cascading is convenient, it should be used with care. Do not blindly apply cascade=all to all associations as it will unnecessarily degrade the performance of your application.

而且,就像您刚刚经历的那样,应用 all 会使您更难理解在处理实体时发生的情况。在您的情况下,您可能只需要 persist:

@ORM\OneToMany(targetEntity="App\Domain\Entity\Post\Post", mappedBy="website", cascade={"persist"})

如果你想了解级联操作,this answer会对你有很大帮助。