我有一个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);
之前简单地对对象进行检查和操作 . 但是你会失去与存储库匹配的可能性 . 所以,这个问题让我很忙......