Доктрина: cascade = "remove" vs orphanremoval = true

В чем разница между двумя вариантами выше? Когда предпочтительнее выбирать каждый вариант?

Ответ 1

Основное различие между ними:

При использовании опции orphanRemoval = true Doctrine делает предположение что субъекты находятся в частной собственности и НЕ будут повторно использоваться другими юридические лица. Если вы пренебрегаете этим допущением, ваши сущности удаляется доктриной, даже если вы назначили осиротевшего объекта другой.

Скажите, что ваш User имеет отношение один ко многим к Comment. Если вы используете cascade="remove", вы можете удалить ссылку для Comment с одного User, а затем прикрепить Comment к другому User. Когда вы их сохраните, они будут правильно сохранены. Но если вы используете orphanRemoval=true, даже если вы удалите данный Comment из одного User, а затем присоединитесь к другому User, этот комментарий будет удален во время сохранения, поскольку ссылка была удалена.