2017-03-21 49 views
7

मैं "बहुरूपी संघों" का उपयोग करता है सिद्धांत 2 के साथ कुछ मदद की जरूरत है। मुझे खुद को स्पष्ट करने दें। संस्थाएं पॉलिमॉर्फिक रिलेशनशिप के सबसेट का उपयोग करके फ़ाइल अनुलग्नकों का समर्थन कर सकती हैं। फ़ाइल इकाई इस रिश्ते जहां फाइलों को संदर्भ फ़ाइलों तालिका में रिकॉर्ड के रूप में जमा हो जाती है safekeep के लिए इस्तेमाल किया और माता पिता के मॉडल के लिए एक बहुरूपी रिश्ता नहीं है है। मैं https://octobercms.com/docs/database/attachments के समान कार्यक्षमता बनाना चाहता हूं लेकिन रिश्ते को कैसे बनाना है, और कैसे, उदाहरण के लिए, अटैचमेंट_ टाइपअटैचमेंट_आईडी जैसे गतिशील;बहुरूपी सिद्धांत में बहुरूपी रिश्ते की एक सबसेट का उपयोग संलग्नक 2

/** 
* @var \Doctrine\Common\Collections\ArrayCollection 
* 
* @ORM\OneToOne(targetEntity="App\Domain\FileAttachment\Entity\FileAttachment", attachment_type="news_thumbnail") 
*/ 
private $thumbnail; 


/** 
* @var \Doctrine\Common\Collections\ArrayCollection 
* 
* @ORM\OneToOne(targetEntity="App\Domain\FileAttachment\Entity\FileAttachment", attachment_type="news_image") 
*/ 
private $image; 

/** 
* @var \Doctrine\Common\Collections\ArrayCollection 
* 
* @ORM\OneToMany(targetEntity="App\Domain\FileAttachment\Entity\FileAttachment", attachment_type="news_files") 
*/ 
private $files; 

फाइल तालिका का एक उदाहरण।

An example of the files table

उत्तर

0

मैं सिम्फोनी में बहुरूपता काम (बहुरूपी फ़ाइलों सहित) बनाने की कोशिश कर में और इस बार मुझे लगता है कि मैं उम्मीद है कि वे के साथ आप प्रदान करेगा में आप के साथ मेरी जानकारियों के कुछ साझा कर सकते हैं द्वारा कुछ अनुभव है इस विषय के बारे में कुछ उपयोगी जानकारी।

सबसे पहले, मैं सिद्धांत link में विरासत मानचित्रण पर पढ़ने का सुझाव होगा। सिद्धांत विरासत मानचित्रण के साथ आप बस एक मुख्य फ़ाइल वर्ग बनाने और उसके बाद हर दूसरे लगाव यह विस्तार होगा। फिर, कहें कि आप उपयोगकर्ता को एक चित्र संलग्नक जोड़ना चाहते हैं। आप उपयोगकर्ता और मुख्य फ़ाइल कक्षा के बीच केवल एक के साथ संबंध बनायेंगे। लगाव आप जारी रहती लगाव वर्गों में से एक का एक उदाहरण होगा, सिद्धांत बहुत चालाक आप उस वर्ग की एक वस्तु, नहीं मुख्य फाइल वर्ग वापस जाने के लिए है।

तो आपको प्रश्न का उत्तर देने के लिए, मैं आपको एक विशिष्ट उदाहरण दूंगा। प्रकरण:

  • ImageAttachment फैली FileAttachment
  • उपयोगकर्ता एक संपत्ति
  • संपत्ति तस्वीर FileAttachment संस्था के लिए एक OneToOne रिश्ता है तस्वीर कहा जाता है

कोड:

$image = new ImageAttachment(); 
$user->setPhoto($image); 

$em->persist($user); 
$em->flush(); 

परिणाम:

अब उपयोगकर्ता तालिका में डेटाबेस, किसी स्तंभ की तरह photo_id संदर्भित आईडी FileAttachment तालिका में एक होगा कुछ कहा में में। जब आप $ user-> getPhoto() करेंगे; यह क्लास ImageAttachment की ऑब्जेक्ट वापस कर देगा क्योंकि सिद्धांत जानता है कि आपने केवल एक फ़ाइल एटैचमेंट नहीं किया है, न केवल एक फ़ाइल एटैचमेंट।


जब संग्रह की बात आती है, तो चीजें भी बहुत सरल होंगी। इस मामले में, आपको फ़ाइल और उस इकाई के बीच कई सारे रिश्ते बनाने की आवश्यकता होगी जिसे आप फ़ाइल से जोड़ना चाहते हैं। मान लें कि उपयोगकर्ता में डेटाबेस में सहेजे गए कई प्रकार के अनुलग्नक हो सकते हैं।यदि आप इस फाइल सिस्टम एप्लिकेशन का व्यापक रूप से उपयोग करना चाहते हैं तो संभवतः किसी फ़ाइल के बारे में जानने के लिए कोई जानकारी नहीं होगी, क्योंकि जल्द ही फ़ाइल को सभी प्रकार के रिश्तों पर जानकारी रखना होगा और यह सिर्फ एक स्मार्ट आर्किटेक्चर नहीं है अगर आप किसी भी प्रकार के मॉड्यूलर सिस्टम को जगह में रखना चाहते हैं तो विकल्प। यही कारण है कि मेरा सुझाव कुछ इकाई और अनुलग्नकों के बीच कई से अधिक रिश्तों का उपयोग करना है। इस तरह केवल उपयोगकर्ता डेटाबेस में फ़ाइलों के बारे में पता होगा और फाइल सिस्टम अज्ञेयवादी और decoupled होगा।

सिद्धांत में बहुलकता के बारे में बात करते समय एक तीसरा महत्वपूर्ण बिंदु इस सुविधा के लिए सिम्फनी समर्थन है। आम तौर पर कुछ मामलों में बहुरूपता को खराब अभ्यास माना जाता है, और विशेष रूप से डेटा दृढ़ता में समुदाय में अधिक समर्थन नहीं होता है। तो विचार करने के लिए एक महत्वपूर्ण बात यह है कि सिम्फनी कलेक्शनटाइप को पॉलिमोरफिश के लिए कोई समर्थन नहीं है, जो कभी भी है। मूल रूप से आपको अपना खुद का प्रकार लिखना होगा यदि आप पॉलिमॉर्फिक फॉर्म संग्रहों का उपयोग करने की योजना बना रहे थे। लेकिन अगर आप थोड़ा अजाक्स का उपयोग नहीं करते हैं, तो यह वास्तव में एक समस्या नहीं है, आप केवल इस उद्देश्य के लिए एसएफ फॉर्मों का उपयोग करने से बच सकते हैं।

संबंधित मुद्दे