В документации Doctrine описано, что метод merge() создаёт новый объект, копирует его состояние и добавляет в persistance context.
Неоднократно встречал подобный код:
$entity = $em->getRepository(...)->findOne($id);
if (null === $entity) {
$entity = new Entity();
$em->persist($entity);
} else {
$entity->setGeneratedAt(new \DateTime());
$em->merge($entity);
}
$em->flush();
Вопрос в следующем, зачем используется $em->merge(), ведь вызов не присваивается никакой переменной и с новой сущностью не производится никаких действий, сущность $entity не является detached и уже находится в persistance context.