我有一个Application
实体,它与SortList
实体有ManyToMany关系。拥有方是Application
。有一个简单的连接表为这个关系创建Map。
下面是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;
}
我希望跟踪何时在Application
中添加或删除SortLists
。
我已经知道我不能使用postUpdate
生命周期事件来跟踪这些变更集合。
相反,我似乎应该使用onFlush,然后使用$unitOfWork->getScheduledCollectionUpdates()
和$unitOfWork->getScheduledCollectionDeletions()
。
对于更新,我可以使用“internal”方法getInsertDiff
来查看集合中添加了哪些项,使用getDeleteDiff
来查看集合中删除了哪些项。
但我有几点担心:
1.如果集合中的所有项都被删除了,则无法查看实际删除了哪些项,因为$unitOfWork->getScheduledCollectionDeletions()
没有此信息。
1.我使用的方法被标记为“内部”;看起来它们可能会在未来的某个时候“消失”或者被重构而不让我知道?
2条答案
按热度按时间6uxekuva1#
我在https://stackoverflow.com/a/75277337/5418514中解决了这个空的getDeleteDiff
这个数据有时候是空的,这是一个老问题,但现在仍然存在。目前的解决办法是自己重新获取数据。
lkaoscv72#
我认为下面的例子涵盖了你所需要的一切,所以你只需要在你的应用程序中实现你想要/需要的东西。
persist
操作,可以使用prePersist and postPersist event listener on an entity或prePersist and postPersist event subscriber on an entity示例。PrePersists不会给予你ID,因为它还不存在于DB中,而PostPersists会如示例所示。remove
操作,可以使用preRemove and postRemove event listener on an entity示例。update
操作,这是一个棘手的问题,您可以使用preUpdate event listener on an entity示例,但要注意它是如何完成的。inserting
、updating
和removing
操作,您可以使用onFlush event listener on an entity示例,该示例涵盖了UnitOfWorkgetScheduledEntityInsertions
、getScheduledEntityUpdates
和getScheduledEntityDeletions
方法。在that website中有许多其他有用的监听器示例,所以只需使用
listener
关键字的搜索功能。有一次我做了与您相同的事情,但无法找到M-N关联的示例。如果我可以,我会发布它,但不确定我是否可以!