Задать вопрос
@galliard

Почему doctrine делает insert вместо update при каскадном сохранении новой сущности?

Есть, значит, такой код :

class Payout
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private ?int $id;

    /**
     * @ORM\OneToOne(targetEntity="PayoutDetails", mappedBy="payout", cascade={"persist", "merge"})
     */
    private ?PayoutDetails $details;
}

abstract class PayoutDetails
{
    /**
     * @ORM\Id()
     * @ORM\OneToOne(targetEntity="Payout")
     */
    private Payout $payout;
}


Связь пейаута и деталей - один к одному, своего id у деталей нет. Когда я первый раз сохраняю пейаут - детали сохраняются каскадно и тут все хорошо, но как только я пытаюсь заменить уже записанный в базу инстанс PayoutDetails на другой инстанс этого же класса, то доктрина пытается делать инсерт и естественно я получаю ошибку ограничения внешнего ключа "Ключ "(payout_id)=(31)" уже существует". А как бы ему указать, что делать надо именно update?

На всякий случай уточню, что перепривязки деталей к новому пейауту не происходит, по сути мне нужно обновить ту же запись в таблице, просто используя другой инстанс сущности с тем же id.
  • Вопрос задан
  • 245 просмотров
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы