在ObjectManager之后逐个刷新实体:merge()

时间:2016-02-07 17:28:04

标签: php symfony doctrine-orm

我有一个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都会被刷新,在检查重复之前我不想要这样做
  • 很多生命周期事件组合,但我认为这不是方法,相关的已经发生在合并中

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

  1. 存储来自UnitOfWork的预定插入。
  2. 清除预定插入列表。
  3. 坚持并逐一冲洗每个插入物并进行检查。
  4. 或者另一个想法 - 非常感谢你!

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

0 个答案:

没有答案