Doctrine事件:如何跟踪ManyToMany集合的添加/删除?

时间:2015-07-24 17:21:28

标签: symfony doctrine-orm

我有一个与Application实体具有ManyToMany关系的SortList实体。拥有方是Application。有一个简单的连接表,可以为这种关系创建映射。

以下是Application实体在管理集合方面的外观:

/**
 * Add sortLists
 *
 * @param \AppBundle\Entity\SortList $sortList
 * @return Application
 */
public function addSortList(SortList $sortList)
{
    $this->sortLists[] = $sortList;
    $sortList->addApplication($this);

    return $this;
}

/**
 * Remove sortLists
 *
 * @param \AppBundle\Entity\SortList $sortList
 */
public function removeSortList(SortList $sortList)
{
    $this->sortLists->removeElement($sortList);
    $sortList->removeApplication($this);
}

/**
 * Get sortLists
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getSortLists()
{
    return $this->sortLists;
}

我想跟踪SortLists 中添加或删除Application的时间。

我已经了解到我无法使用postUpdate生命周期事件来跟踪这些更改集合。

相反,我似乎应该使用onFlush,然后使用$unitOfWork->getScheduledCollectionUpdates()$unitOfWork->getScheduledCollectionDeletions()

对于更新,我看到我可以使用“内部”方法getInsertDiff来查看集合中的哪些项目已添加,getDeleteDiff可以查看集合中的哪些项目已被删除。

但我有几个问题:

  1. 如果集合中的所有项目都已删除,则无法查看实际删除了哪些项目,因为$unitOfWork->getScheduledCollectionDeletions()没有此信息。
  2. 我正在使用标记为“内部”的方法;在我不知情的情况下,他们似乎可以“消失”或在未来的某些时候进行重构?

1 个答案:

答案 0 :(得分:0)

我认为以下示例涵盖了您需要的所有内容,因此您只需在应用中实现您想要/需要的内容。

that website中还有许多其他有用的侦听器示例,因此只需使用listener关键字的搜索功能即可。一旦我为M-N协会做了同样的事情,但找不到例子。如果我可以发布它但不确定我是否可以!