【发布时间】:2016-11-08 18:48:41
【问题描述】:
我有以下 Doctrine 实体设置:
class MainEntity
{
/**
* @var SecondEntity[]
*
* @ORM\OneToMany(targetEntity="SecondEntity", mappedBy="mainEntity", cascade={"persist"})
*/
private $secondEntities;
/**
* @var integer
*
* @ORM\Column(type="integer", nullable=false, name="second_entities_count")
*/
private $secondEntitiesCount;
...
}
class SecondEntity
{
/**
* @var MainEntity
*
* @ORM\ManyToOne(targetEntity="MainEntity", inversedBy="secondEntities")
* @ORM\JoinColumn(name="main_entity_id", referencedColumnName="id", nullable=false)
*/
private $mainEntity;
...
}
创建或删除SecondEntity 时,我希望相关MainEntity 中的$secondEntitiesCount 相应更新。
为了实现这一点,我创建了一个 onFlush 订阅者,它收集所有预定删除和插入 SecondEntity 对象
$delsertions = array_merge(
$unitOfWork->getScheduledEntityInsertions(),
$unitOfWork->getScheduledEntityDeletions()
);
foreach ($delsertions as $entity) {
if ($entity instanceof SecondEntity) {
$mainEntity = $entity->getMainEntity();
$mainEntityMeta = $em->getClassMetadata(MainEntity::class);
$unitOfWork->recomputeSingleEntityChangeSet($mainEntityMeta, $mainEntity);
dump($mainEntity->getSecondEntities); // The creation/deletion of the current entity is not reflected here!
}
}
问题是在上面的dump() 中,在创建/删除触发订阅者的实体之后,集合并没有相应地更新。例如,如果我为给定的MainEntity 创建第一个SecondEntity,则$secondEntities 集合将为空。
如果我要删除唯一的SecondEntity,$secondEntities 集合中仍会包含该对象。
在这种情况下,recomputeSingleEntityChangeSet() 调用似乎没有任何作用。
如何强制正确更新集合?
【问题讨论】:
标签: symfony doctrine-orm doctrine