इससे पहले कि मैं अपनी समस्या का वर्णन, यह वास्तव में यह स्पष्ट कर सकता है अगर मैं त्रुटि मैं हो रही है के साथ शुरू:सिद्धांत कई-से-अनेक संबंध जब मैं एक प्रवास बनाए जाने वाली तालिका में दो बार बनाना चाहता है
$ ./app/console doc:mig:diff
[Doctrine\DBAL\Schema\SchemaException]
The table with name 'user_media_area' already exists.
यह बिल्कुल सही है - user_media_area
मौजूद है। मैंने इसे पिछले माइग्रेशन में बनाया है और मुझे समझ में नहीं आता क्यों सिम्फनी टेबल को फिर से बनाने की कोशिश कर रहा है।
मेरी समस्या में कई से अधिक रिश्तों के साथ कुछ करना है। मेरे पास user
नामक एक टेबल है, जिसे media_area
नामक एक तालिका और user_media_area
नामक एक तालिका है।
यहाँ कोड मैं कहाँ बता user
के बारे में media_area
(Entity/User.php
) है:
/**
* @ORM\ManyToMany(targetEntity="MediaArea", inversedBy="mediaAreas")
* @JoinTable(name="user_media_area",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="media_area_id", referencedColumnName="id")}
* )
*/
private $mediaAreas;
और यहाँ है, जहां मैं media_area
के बारे में user
(Entity/MediaArea.php
) बता:
/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="users")
*/
private $users;
दिलचस्प बात यह है कि अगर मैं हटा दें कि है JoinTable
Entity/User.php
, ./app/console doctrine:migrations:diff
से सामान फिर से काम करेगा:
/**
* @ORM\ManyToMany(targetEntity="MediaArea", inversedBy="mediaAreas")
*/
private $mediaAreas;
हालांकि, यह एक छोटे से बंद है: यह अब एक नई तालिका mediaarea
कहा जाता है बनाने के लिए, है जो मैं नहीं चाहता चाहता है। मेरी तालिका पहले से मौजूद है और इसे media_area
कहा जाता है।
तो यह किसी भी तरह से की तरह दिखता है, Symfony मेरी User
कक्षा में इस ManyToMany
बात के आधार पर एक तालिका बनाने के लिए कोशिश कर रहा है, और एकमात्र कारण समस्या दूर हो जाने जब मैं हटाने JoinTable
कि तालिका के नाम यह चाहता है बनाने के लिए (mediaarea
) अब मेरी तालिका के वास्तविक नाम से मेल नहीं खाता है (media_area
)।
तो मेरा प्रश्न है: यह बिल्कुल एक नई टेबल क्यों बनाना चाहता है? मैं क्या गलत कर रहा हूं?
(मैं जानता हूँ कि यह संभव है कि मेरी नामकरण सम्मेलनों के लिए रवाना। Symfony और सिद्धांत के डाटाबेस उदाहरण बहु अवधि स्तंभ नाम है frustratingly रहित हैं, इसलिए मैं हमेशा पता नहीं है अगर मैं media_area
या mediaArea
क्या करना चाहिए हूँ।)
यह उत्तर के रूप में क्यों चिह्नित किया गया है? यह ओपी के सवाल का जवाब नहीं देता है कि इस त्रुटि को दिखाने से सिद्धांत को कैसे रोकें। इसे जोड़ने पर मुझे सिद्धांत \ सामान्य \ एनोटेशन \ एनोटेशन अपवाद मिला: [अर्थात् त्रुटि] एनोटेशन @ORM \ तालिका को संपत्ति पर घोषित करने की अनुमति नहीं है उपयोगकर्ता :: $ मीडिया एरिया। आप इन कोड तत्वों पर केवल इस एनोटेशन का उपयोग कर सकते हैं: क्लास। – jaycode
आप संपत्ति स्तर पर '@ ORM/Table' एनोटेशन डालने का प्रयास कर रहे हैं, जबकि इसे कक्षा स्तर पर रखा जाना चाहिए। त्रुटि में सवाल या उत्तर के साथ कुछ लेना देना नहीं है। –
सही एनोटेशन @ ORM/JoinTable – luliandro