реализация «update if exists» в Doctrine ORM

Я пытаюсь INSERT OR UPDATE IF EXISTS в одной транзакции.

в mysql я обычно использовал DUPLICATE KEY («ОБНОВЛЕНИЕ НА КЛЮЧЕ DUPLICATE».) Я знаю много решений этой проблемы, используя различные варианты и подзапросы SQL, но я пытаюсь реализовать это в Doctrine (PHP ORM ). Похоже, что для этого будут методы Doctrine, так как они настолько функциональны, но я ничего не нахожу. Почему-то проблема с использованием пакетов PHP ORM по какой-то причине? Или кто-нибудь из экспертов «Доктрины» знает, как добиться этого через хаки или любые средства?

Единственное, о чем я могу думать, – это сначала запросить сущность, если она существует, иначе создайте новый объект.

 if(!$entity = Doctrine::getTable('Foo')->find(/*[insert id]*/)) { $entity = new Foo(); } /*do logic here*/ $entity->save(); 

Doctrine поддерживает REPLACE INTO с помощью метода replace() . Это должно работать точно так же, как ON DUPLICATE KEY UPDATE .

Документы: замена записей

Согласно https://www.vivait.co.uk/labs/updating-entities-when-an-insert-has-a-duplicate-key-in-doctrine, это может быть достигнуто с помощью $entityManager->merge() .

 $entity = new Table(); $entity->setId(1); $entity->setValue('TEST'); $entityManager->merge($entity); $entityManager->flush();