gpt4 book ai didi

doctrine-orm - 在 onFlush 监听器中重新计算实体变更集

转载 作者:行者123 更新时间:2023-12-05 00:29:59 33 4
gpt4 key购买 nike

考虑以下模式:

[Work]
id
tags ManyToMany(targetEntity="Tag", inversedBy="works", cascade={"persist"})

[Tag]
id
works_count
works ManyToMany(targetEntity="Work", mappedBy="tags")
works_countTag::works 的计数器缓存.

我有一个 onFlush听者在 工作检查是否 Work::tags已更改,并更新每个标签的 works_count .
public function onFlush(OnFlushEventArgs $args)
{
foreach ($uow->getScheduledEntityUpdates() as $work) {
$changedTags = /* update relevant tags and return all the changed ones */

$metadata = $em->getClassMetadata('Acme\Entity\Tag');

foreach ($changedTags as $tag) {
$uow->recomputeSingleEntityChangeSet($metadata, $tag);
}
}
}

现在,如果我阅读更新标签的变更集, works_count 的变化正确显示, 但是 他们不会在数据库中更新..

如果我更换 recomputeSingleEntityChangeSet()computeChangeSet()然后一切都按预期工作并且数据库更新,但是 computeChangeSet()有一个 @internal Don't call from the outside.注释,所以我不确定后果是什么..

互联网上的每个消息来源都说要使用 recomputeSingleEntityChangeSet那么为什么在这种情况下不起作用呢?

附注
标签由 EntityManager 管理( $em->contains($tag) 返回 true)

最佳答案

这个问题与 UnitOfWork 中的一个错误有关,最后它在 Doctrine ORM 2.4.3 的发布中得到修复。 2014 年 9 月 11 日。见 DDC-2996详情。

关于doctrine-orm - 在 onFlush 监听器中重新计算实体变更集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597774/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com