Doctrine orm 原则2:对所有实体进行级联预删除

Doctrine orm 原则2:对所有实体进行级联预删除,doctrine-orm,Doctrine Orm,我正在读《条令2》文档>事件>预删除 每次调用时都会调用preRemove事件 将其传递给 EntityManager#remove()方法。它是 对所有关联进行级联 标记为级联删除 对什么没有限制 方法可以在 preRemove事件,除非 在过程中调用了remove方法本身 冲洗操作 我正在努力处理相关实体发生的事情 用户可以 自有项目 在项目中合作 自己的托达利斯特 自有待办事项 被指派做某事 所以我想处理所有这些关系。所以我做了一些类似的事情 /** * @PreRemove */

我正在读《条令2》文档>事件>预删除

每次调用时都会调用
preRemove
事件 将其传递给
EntityManager#remove()
方法。它是 对所有关联进行级联 标记为级联删除

对什么没有限制 方法可以在
preRemove
事件,除非 在过程中调用了remove方法本身 冲洗操作

我正在努力处理相关实体发生的事情

用户可以

  • 自有项目
  • 在项目中合作
  • 自己的托达利斯特
  • 自有待办事项
  • 被指派做某事
所以我想处理所有这些关系。所以我做了一些类似的事情

/**
 * @PreRemove
 */
protected function onPreRemove() {
  foreach ($this->projects as $proj) {
    $proj->collaborators->remove($this);
  }
  foreach ($this->ownedTodoLists as $todoList) {
    $todoList->owner = $todoList->project->owner;
  }
  foreach ($this->ownedTodos as $todo) {
    $todo->owner = $todo->todoList->owner;
  }
  foreach ($this->assignedTodos as $todo) {
    $todo->assigned = $todo->todoList->owner;
  }
}
但是我在想,如果对每个标记为cascade delete的关联调用这个函数(
preRemove
),如果我的Todo、TodoList链接标记为cascade delete,这个函数调用就不会对它们调用了?它会浪费资源甚至抛出错误,对吗
$this
在Todo这样的实体上运行时会引用它们吗?那么,如何处理这些关系呢


或者我不标记实体级联,而是使用类似于这些的函数来手动级联删除

在处理特殊逻辑时(如您提供的代码片段中),我认为这是@preRemove事件挂钩的典型用法。我不会对任何列使用内部级联。

Hmm我正在尝试将级联转换为使用preRemove挂钩,但我有一个问题,要删除一个实体,我需要实体管理器,对吗?但我读到模型参考实体管理器不是一个好主意?有没有一种方法可以通过preRemove在模型中级联删除,或者是通过服务类进行级联删除的唯一方法哦,对了,我看到了您试图指出的困境。但是,不,我认为你不需要它,根据。要回答您的另一个问题,请不要在实体中使用EntityManager。