我有一个Doctrine \ ORM实体,由Doctrine ObjectManager创建的新的和现有的数据库实体组成:merge() . 在刷新之前,我想防止重复(上下文是用户可以在同一请求中发送例如重复城市名称的api) .

如上所述in this github issue,建议在每次执行persist()操作后刷新,以便能够在我的数据库中查询现有记录,包括此请求中保留的记录 . 我怎么能这样做?

我的代码是:

...
$object = $mapper->map($objectRaw, new $modelClassName());
$object = $em->merge($object);
# I need to intervene here I suppose
$em->flush();

我试过了:

  • 在github问题上提到的提示,dql会自动触发刷新,但是在merge()之后,这意味着所有新的entites都会被刷新,这在检查重复之前我不想要

  • 很多生命周期事件组合,但我认为这不是方法,相关的已经发生在合并中

似乎我需要一种方法来逐个刷新每个实体并在那时进行检查,例如:

  • 存储UnitOfWork的预定插入 .

  • 清除预定插入列表 .

  • 持续并逐个刷新每个插入并进行检查 .

或者另一个想法 - 非常感谢你!

Edit: 另一个想法可能是在 $em->merge($object); 之前简单地对对象进行检查和操作 . 但是你会失去与存储库匹配的可能性 . 所以,这个问题让我很忙......