cascade = {“remove”} VS huérfanoRemoval = true VS ondelete = "CASCADE
Intenté reunir poca información sobre las siguientes formas de eliminar automáticamente la entidad secundaria cuando se elimina una entidad principal. Parece que la forma más común es usar una de esas tres anotaciones:cascada = {"eliminar"} OorphanRemoval = true Oondelete = "CASCADA".
soyun poco confuso sobre el tercero:ondelete = "CASCADA", ya que la explicación en la documentación de la documentación oficial sobre esto es muy escasa) y me encantaría que alguien pudieraconfirmame la siguiente información Reuní y entendí de mi investigación en la red y experiencia ...
QUE HACEcascada = {"eliminar"}
==> la entidad en el lado inverso se elimina cuando la entidad del lado propietario es. Incluso si está en una gran cantidad con otra entidad secundaria propietaria.
- debe usarse en la colección (por lo tanto, en la relación OneToMany o ManyToMany)
- implementación en el ORM
orphanRemoval = true
==> la entidad en el lado inverso se elimina cuando la entidad del lado propietario es Y ya no está conectada a ninguna otra entidad del lado propietario. (árbitro.doctrina official_doc - implementación en el ORM
- se puede usar con OneToOne, OnetoMany o ManyToMany
onDelete = "CASCADA"
==> esto agregará On Delete Cascade a la columna de clave externa en la base de datos
- Esta estrategia es un poco complicada, pero puede ser muy poderosa y rápida. (árbitro.doctrina official_doc ... pero no he leído más explicaciones)
- ORM tiene que hacer menos trabajo (en comparación con las dos formas anteriores de hacerlo) y, por lo tanto, debería tener un mejor rendimiento.
otra información
- todas esas 3 formas de hacer se implementan en entidades de relación bidireccional (¿¿¿derecho???)
- usando cascade = {"remove"} omite completamente cualquier clave foránea onDelete = CASCADE. (árbitro.doctrina_oficial_doc)
cascada = {"eliminar"}
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", cascade={"remove"})
*/
protected $Phonenumbers
orphanRemoval = true
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", orphanRemoval=true)
*/
protected $Phonenumbers
onDelete = "CASCADA"
/**
* @ManyToOne(targetEntity="Contact", inversedBy="phonenumbers")
* @JoinColumn(name="contact_id", referencedColumnName="contact_id", onDelete="CASCADE")
*/
protected $contact;