Я пытаюсь реализовать "ЕСЛИ запись существует, то после вставки" в MySQL. В частности, я должен выяснить, как это сделать с помощью Doctrine ORM.
Одним из решений, использующих собственный MySql, является использование «ON DUPLICATE KEY UPDATE». К сожалению, это не поддерживается в доктрине.
Другим полурешением является использование синтаксиса «REPLACE INTO». Doctrine поддерживает это, однако REPLACE не обновляет записи, вместо этого он удаляет запись и создает новую (с новым идентификатором автоинкремента). Из-за этого плохое решение, если вы полагаетесь на идентификаторы автоинкремента, как и я. ,
Таблица, над которой я пытаюсь работать, - это INNODB, поэтому я рассмотрел транзакции, но я не до конца понимаю, применяются ли внутри транзакций те же правила, что и вне их.
Могу ли я сказать «ЕСЛИ (ВСТАВИТЬ ИГНОРИРУЕТ ВНУТРИ таблицы critical_id
= $ id), ТО ВЫЙТИ из ELSE (ОБНОВИТЬ таблицу SET field
= 'new_value')" внутри транзакции?
Если я не могу сказать что-то подобное, есть ли решение этой проблемы?