Я пытаюсь 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();