学说2:PreRemove级联所有实体

时间:2011-01-21 01:54:10

标签: doctrine-orm

我正在阅读Doctrine 2 Docs>活动>预删除。

  

每个人都会调用preRemove个事件   实体何时传递给   EntityManager#remove()方法。它是   所有协会都是级联的   标记为级联删除。

     

对什么没有限制   方法可以在里面调用   preRemove事件,除非是   删除方法本身在调用期间   冲洗操作。

我正在尝试处理相关实体的情况。

例如。用户可以......

  • 自有项目
  • 在项目中协作
  • 自己的TodoLists
  • 拥有Todos
  • 分配Todos

所以我想处理preRemove所有这些关系。所以我做了类似

的事情
/**
 * @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;
  }
}

但我想是否为每个标记为级联删除的关联调用此函数(preRemove),如果我的Todo,TodoList,Links标记为级联删除,则此函数调用不适合它们?它会浪费资源甚至抛出错误吗?当{Todo}在它们上面运行时,{T <1}会引用这些实体吗?那么如何处理这些关系呢?

或者我可能没有标记实体级联,但是使用这些函数来手动级联删除?

1 个答案:

答案 0 :(得分:0)

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