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
操作,您可以使用
以身作则,但要注意
它是如何做到的
- 对于
插入
、更新
和删除
操作,您可以使用
例子包括
UnitOfWorkGetScheduleIdentityInsertions
,
getScheduledEntityUpdates
和getScheduledEntityDeletions
方法
中还有许多其他有用的侦听器示例,所以只需使用listener
关键字的搜索功能即可。有一次,我做了与您希望的M-N关联相同的事情,但找不到示例。如果可以,我会把它贴出来,但不确定我是否可以 我认为下面的示例涵盖了您需要的所有内容,因此您只需要在应用程序中实现您想要/需要的内容
- 对于跟踪
persist
操作,可以使用或示例。预科生
不会给你ID,因为它在DB中还不存在
PostPersist将如示例所示
- 对于跟踪
remove
操作,可以使用示例
- 对于棘手的跟踪
update
操作,您可以使用
以身作则,但要注意
它是如何做到的
- 对于
插入
、更新
和删除
操作,您可以使用
例子包括
UnitOfWorkGetScheduleIdentityInsertions
,
getScheduledEntityUpdates
和getScheduledEntityDeletions
方法
中还有许多其他有用的侦听器示例,所以只需使用listener
关键字的搜索功能即可。有一次,我做了与您希望的M-N关联相同的事情,但找不到示例。如果可以,我会把它贴出来,但不确定我是否可以 这没有帮助-我的问题特别是在许多集合中-正在创建/删除的记录实际上不是一个实体,而是由Doctrine管理的简单联接表表示。一般来说,如果您选择m-n关系,而没有中间实体,您的应用程序中会遇到一些限制。如果你选择1-n和n-1,那么你将摆脱所有可能的限制,就像你目前的情况一样。反正是你的电话。这只是我的一个建议。这并没有帮助——我的问题特别是在许多集合中——正在创建/删除的记录实际上不是一个实体,而是由一个简单的连接表表示,由Doctrine管理。一般来说,如果你选择m-n关系而不是有一个中间实体。如果你选择1-n和n-1,那么你将摆脱所有可能的限制,就像你目前的情况一样。反正是你的电话。只是我的一个建议。