В моем приложении в очень точном случае, когда я пытаюсь обновить объект с помощью Doctrine, это не удалось, потому что «Ключ уже существует».
Фактически, Doctrine пытается использовать INSERT INTO вместо UPDATE, и я не понимаю почему.
Чтобы понять, почему Doctrine не выбирает правильный путь, я хочу знать, на чем основана Doctrine при выборе INSERT INTO или UPDATE?
Вроде не по ID, ну и что?
Возможно, это поможет найти ответ: я использую PostgreSQL
Вы можете предоставить нам образец кода? Мы не сможем вам помочь без минимальный воспроизводимый пример
@ LP154 Я не могу, поэтому я задаю вопрос: я не определяю шаблон для его воспроизведения. Дело в том, что данные обновления поступают из полезной нагрузки запроса, поэтому, возможно, Doctrine не обнаруживает, что это должно быть обновление?
Вы создали и заполнили сущность вручную, не загружая ее предварительно через Doctrine?
Да, я сделал это.
@LeCintas вам нужно сначала получить сущность, чтобы Doctrine знала о сущности и о том, как рассчитывать изменения, или объединить вашу сущность с EM. Решение ВСТАВИТЬ / ОБНОВИТЬ не может полагаться на наличие идентификатора, так как у вас может быть новый объект с вручную назначенным идентификатором, который требует вставки.
Я сделал $this->em->merge();, и у сущности есть @ORM\id(). Я нашел ответ на свою проблему: идентификатор дочерней сущности моей «основной» сущности не был установлен при обновлении, поэтому Doctrine решила создать новую «главную» запись сущности, чтобы удовлетворить Соотношение.




