пятница, 6 ноября 2015 г.

Symfony2 Doctrine: cascade=“remove” vs orphanRemoval=true

Из документации:

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


  1. Сказать, что ваш Пользователь имеет one-to-many связи Комментарий. Если вы используете cascade="remove", можно удалить ссылку на Комментарий от одного пользователя, а затем добавить Комментарий для другого Пользователя
  2. Если вы будете настойчивы, то они будут корректно сохранены. Но если вы используете orphanRemoval=true, даже если вы удалите дается Комментарий от одного Пользователя, а затем прикрепить к другому Пользователю, этот комментарий будет удален во время сохранится, поскольку ссылка была удалена.
  3. Если вместо этого при удалении нужно использовать механизмы каскадности, предоставляемые базой данных, то каждую join column можно сконфигурировать с опцией onDelete.
Другими словами:

  • ORM - использует cascade={"remove"} в ассоциации - это расчет, который делается в UnitOfWork и не влияет на структуру базы данных. При удалении объекта, на UnitOfWork будет перебрать все объекты в ассоциации и удалить их. 
  • на уровне базы данных - использует onDelete="CASCADE" на ассоциации joinColumn - это добавит на удаление Каскад на столбец внешнего ключа в базе данных:

Комментариев нет:

Отправить комментарий