Bir ana varlık silindiğinde otomatik olarak alt varlığı silmenin aşağıdaki yolu hakkında birkaç bilgi toplamaya çalıştım. Görünüşe göre en yaygın yol bu üç ek açıklamadan birini kullanmak: cascade = {"remove"} OR orphanRemoval = true OR ondelete = "CASCADE" .
Ben : Üçüncü biri hakkında biraz şaşırtmak ondelete = "cascade" bu çok azdır ilgili doktrini resmi belgelerinde açıklama olarak,) ve birisi eğer çok isterim şu bilgileri onaylamak ben toplayıp benim araştırma anlama net ve deneyim ...
BU NE YAPAR
cascade = {"remove"}
==> ters taraftaki varlık, sahibi olan taraf olduğu zaman silinir. Sahip olunan diğer tarafla çok sayıda olsanız bile.
- koleksiyonda kullanılmalıdır (yani OneToMany veya ManyToMany ilişkisinde)
- ORM'de uygulama
orphanRemoval = true
==> ters taraftaki varlık, sahip taraftaki varlık olduğunda VE artık başka bir sahip taraf varlığa bağlı olmadığında silinir. (ref. doctrine official_doc
-
ORM'de uygulama - OneToOne, OnetoMany veya ManyToMany ile kullanılabilir
onDelete = "CASCADE"
==> bu, veritabanındaki yabancı anahtar sütununa Silme Sırasında Basamaklama ekleyecektir
- Bu stratejiyi doğru yapmak biraz zor ama çok güçlü ve hızlı olabilir. (ref. doctrine official_doc ... ancak daha fazla açıklama okumamıştır)
- ORM daha az iş yapmak zorundadır (önceki iki yöntemle karşılaştırıldığında) ve bu nedenle daha iyi performansa sahip olmalıdır.
diğer bilgiler
- tüm bu 3 yöntem çift yönlü ilişki varlıkları üzerinde uygulanır ( sağ mı ??? )
- cascade = {"remove"} kullanmak, onDelete = CASCADE herhangi bir yabancı anahtarı tamamen baypas eder. (ref. doctrine_official_doc )
KOD İÇİNDE NASIL KULLANILACAĞI ÖRNEĞİ
- orphanRemoval ve cascade = {"remove"} ters çevrilmiş varlık sınıfında tanımlanmıştır.
- ondelete = "CASCADE", sahip varlıkta tanımlanmıştır
- Ayrıca @ORM \ JoinColumn (onDelete = "CASCADE") yazabilir ve doktrinin sütun adlarını işlemesine izin verebilirsiniz
cascade = {"kaldır"}
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", cascade={"remove"})
*/
protected $Phonenumbers
orphanRemoval = true
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", orphanRemoval=true)
*/
protected $Phonenumbers
onDelete = "KADEMELİ"
/**
* @ManyToOne(targetEntity="Contact", inversedBy="phonenumbers")
* @JoinColumn(name="contact_id", referencedColumnName="contact_id", onDelete="CASCADE")
*/
protected $contact;