Подтвердить что ты не робот

Реализация "update if exists" в Doctrine ORM

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 5

Может ли решение merge() работать, только если у вас есть первичный ключ? Что делать, если вы пытаетесь сделать это с помощью ограничения уникального ключа, генерирующего нарушение?