Symfony 条令事件:如何跟踪多个集合的添加/删除?

Symfony 条令事件:如何跟踪多个集合的添加/删除?,symfony,doctrine-orm,Symfony,Doctrine Orm,我有一个应用程序实体,它与排序列表实体有很多关系。拥有方是应用程序。有一个简单的联接表可以创建此关系的映射 以下是应用程序实体在管理集合方面的外观: /** * Add sortLists * * @param \AppBundle\Entity\SortList $sortList * @return Application */ public function addSortList(SortList $sortList) { $this->sortLists[] =

我有一个
应用程序
实体,它与
排序列表
实体有很多关系。拥有方是
应用程序
。有一个简单的联接表可以创建此关系的映射

以下是
应用程序
实体在管理集合方面的外观:

/**
 * 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;
}
我想跟踪
分类列表
何时从
应用程序中添加或删除

我已经了解到,我不能使用
postUpdate
lifecycle事件来跟踪这些更改

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

对于更新,我可以使用“内部”方法
getInsertDiff
查看集合中添加了哪些项,并使用
getDeleteDiff
查看集合中删除了哪些项

但我有几点担心:

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

  • 我认为下面的例子涵盖了你需要的一切,因此你只需要在你的应用程序中实现你想要/需要的东西

    • 对于跟踪
      persist
      操作,可以使用或示例。预科生 不会给你ID,因为它在DB中还不存在 PostPersist将如示例所示
    • 对于跟踪
      remove
      操作,可以使用示例
    • 对于棘手的跟踪
      update
      操作,您可以使用 以身作则,但要注意 它是如何做到的
    • 对于
      插入
      更新
      删除
      操作,您可以使用 例子包括 UnitOfWork
      GetScheduleIdentityInsertions
      getScheduledEntityUpdates
      getScheduledEntityDeletions
      方法

    中还有许多其他有用的侦听器示例,所以只需使用
    listener
    关键字的搜索功能即可。有一次,我做了与您希望的M-N关联相同的事情,但找不到示例。如果可以,我会把它贴出来,但不确定我是否可以

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

    • 对于跟踪
      persist
      操作,可以使用或示例。预科生 不会给你ID,因为它在DB中还不存在 PostPersist将如示例所示
    • 对于跟踪
      remove
      操作,可以使用示例
    • 对于棘手的跟踪
      update
      操作,您可以使用 以身作则,但要注意 它是如何做到的
    • 对于
      插入
      更新
      删除
      操作,您可以使用 例子包括 UnitOfWork
      GetScheduleIdentityInsertions
      getScheduledEntityUpdates
      getScheduledEntityDeletions
      方法

    中还有许多其他有用的侦听器示例,所以只需使用
    listener
    关键字的搜索功能即可。有一次,我做了与您希望的M-N关联相同的事情,但找不到示例。如果可以,我会把它贴出来,但不确定我是否可以

    这没有帮助-我的问题特别是在许多集合中-正在创建/删除的记录实际上不是一个实体,而是由Doctrine管理的简单联接表表示。一般来说,如果您选择m-n关系,而没有中间实体,您的应用程序中会遇到一些限制。如果你选择1-n和n-1,那么你将摆脱所有可能的限制,就像你目前的情况一样。反正是你的电话。这只是我的一个建议。这并没有帮助——我的问题特别是在许多集合中——正在创建/删除的记录实际上不是一个实体,而是由一个简单的连接表表示,由Doctrine管理。一般来说,如果你选择m-n关系而不是有一个中间实体。如果你选择1-n和n-1,那么你将摆脱所有可能的限制,就像你目前的情况一样。反正是你的电话。只是我的一个建议。