tam*_*mir 5 event-listener changeset doctrine-orm
考虑以下模式:
[Work]
id
tags ManyToMany(targetEntity="Tag", inversedBy="works", cascade={"persist"})
[Tag]
id
works_count
works ManyToMany(targetEntity="Work", mappedBy="tags")
Run Code Online (Sandbox Code Playgroud)
works_count是 的计数器缓存Tag::works。
我onFlush在Work上有一个侦听器,用于检查是否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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我阅读更新标签的变更集, 的更改会works_count正确显示,但它们不会在数据库中更新..
如果我替换为recomputeSingleEntityChangeSet(),computeChangeSet()那么一切都按预期工作并且数据库已更新,但是computeChangeSet() 上有一个@internal Don't call from the outside.注释,所以我不确定后果是什么..
互联网上的每个来源都说要使用,recomputeSingleEntityChangeSet那么为什么在这种情况下不起作用呢?
PS
标签由EntityManager管理($em->contains($tag)返回true)
| 归档时间: |
|
| 查看次数: |
6918 次 |
| 最近记录: |