मैंने मूल इकाई को हटाए जाने पर स्वचालित रूप से बाल इकाई को हटाने के लिए निम्नलिखित तरीके के बारे में कुछ जानकारी इकट्ठा करने की कोशिश की। लगता है कि सबसे आम तरीका उन तीन एनोटेशन में से एक का उपयोग करना है: कैस्केड = {"निकालें"} या orphanRemoval = true या ondelete = "CASCADE" ।
मैं तीसरे एक के बारे में थोड़ा भ्रमित हूं : ondelete = "CASCADE" , इस बारे में सिद्धांत के आधिकारिक दस्तावेज में स्पष्टीकरण बहुत ही दुर्लभ हैं) और मुझे अच्छा लगेगा अगर कोई मुझे निम्नलिखित जानकारी की पुष्टि कर सके जो मैंने एकत्र की और अपने शोध से समझा। नेट और अनुभव ...
यह क्या करता है
कैस्केड = {"निकालें"}
==> उलटा पक्ष पर इकाई को हटा दिया जाता है जब मालिक पक्ष इकाई होती है। भले ही आप अन्य मालिकाना पक्ष के साथ एक बहुसंख्यक वर्ग में हों।
- संग्रह पर उपयोग किया जाना चाहिए (इसलिए OneToMany या ManyToMany संबंध में)
- ORM में कार्यान्वयन
orphanRemoval = true
==> व्युत्क्रम पक्ष पर इकाई को हटा दिया जाता है जब मालिक पक्ष इकाई होती है। और यह अब किसी अन्य सहयोगी पक्ष इकाई से जुड़ा नहीं है। (रेफरी doctrine official_doc
- ORM में कार्यान्वयन
- OneToOne, OnetoMany या ManyToMany के साथ उपयोग किया जा सकता है
onDelete = "CASCADE"
==> यह डेटाबेस में विदेशी कुंजी कॉलम में डिलीट कैस्केड को जोड़ देगा
- यह रणनीति सही पाने के लिए थोड़ी मुश्किल है लेकिन बहुत शक्तिशाली और तेज हो सकती है। (Ref। doctrine official_doc ... लेकिन अधिक स्पष्टीकरण नहीं पढ़ा है)
- ORM को कम काम करना पड़ता है (करने के दो पिछले तरीके की तुलना में) और इसलिए उसका प्रदर्शन बेहतर होना चाहिए।
अन्य जानकारी
- उन सभी 3 तरीकों को द्विदिशीय संबंध संबंध संस्थाओं ( दाएं ??? ) पर लागू किया जाता है
- कैस्केड = {"हटाएं"} का उपयोग करके किसी भी विदेशी कुंजी onDelete = CASCADE को पूरी तरह से पास करता है। (रेफ। doctrine_official_doc )
कोड में इसे उपयोग करने के लिए कैसे करें
- orphanRemoval और कैस्केड = {"निकालें"} को उलट इकाई वर्ग में परिभाषित किया गया है।
- ondelete = "CASCADE" को मालिक इकाई में परिभाषित किया गया है
- आप सिर्फ @ORM \ JoinColumn (onDelete = "CASCADE") भी लिख सकते हैं और डॉक्ट्रीन को अपने नामों को लॉक करने दें
झरना = { "निकालें"}
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", cascade={"remove"})
*/
protected $Phonenumbers
orphanRemoval सच =
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", orphanRemoval=true)
*/
protected $Phonenumbers
onDelete = "CASCADE"
/**
* @ManyToOne(targetEntity="Contact", inversedBy="phonenumbers")
* @JoinColumn(name="contact_id", referencedColumnName="contact_id", onDelete="CASCADE")
*/
protected $contact;