2013-10-16 5 views
5

मुझे Symfony2 में इकाई विरासत का उपयोग करने में समस्या हो रही है। यहाँ मेरी दो वर्ग हैं:Symfony2: किसी क्षेत्र में इकाई पर कॉलम 'आईडी' की डुप्लिकेट परिभाषा या भेदभाव कॉलम मैपिंग

use Doctrine\ORM\Mapping as ORM; 

/** 
* @Orm\MappedSuperclass 
*/ 
class Object 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
} 


/** 
    * @Orm\MappedSuperclass 
*/ 
class Book extends Object 
{ 
} 

जब मैं php एप्लिकेशन/कंसोल सिद्धांत चलाएँ: स्कीमा: बनाने मैं निम्नलिखित त्रुटि मिलती है:

[Doctrine\ORM\Mapping\MappingException] 
Duplicate definition of column 'id' on entity 'Name\SiteBundle\Entity\Book' in a field or discriminator column mapping. 

यह क्या कारण हो सकता है?

धन्यवाद :)

अद्यतन:

आप सही मैं इस याद कर रहे हैं। अब मैं दोनों वर्गों के साथ एकल तालिका विरासत का उपयोग कर रहा हूं:

/** 
* @Entity 
* @InheritanceType("SINGLE_TABLE") 
* @DiscriminatorColumn(name="discr", type="string") 
* @DiscriminatorMap({"object" = "Object", "book" = "Book"}) 
*/ 

लेकिन मुझे अभी भी एक ही त्रुटि संदेश मिलता है।

+0

आप एकाधिक वंशानुक्रम कोशिश कर रहे हैं अवांछनीय मैपिंग अक्षम करना चाहिए? यदि नहीं, तो मैं आपको [मैपडसुपर क्लास के बारे में प्रलेखन] (http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#mapped-superclasses) विशेष रूप से पीले रंग के बॉक्स को पढ़ने के लिए आमंत्रित करता हूं। "मैप्डसुपरक्लास एक इकाई नहीं हो सकता" –

उत्तर

7

असल में मैं में संसाधन/config/सिद्धांत/है, जो मेरी संस्थाओं को परिभाषित कर रहे थे YML फ़ाइलें मिल बस के बजाय, एनोटेशन का उपयोग करना

मैंने इन फ़ाइलों को हटा दिया और अब यह काम कर रहा है।

आपकी मदद के लिए धन्यवाद!

+0

आपके उत्तर ने भी मेरी मदद की! :) सिम्फनी 3.1 एफओएसयूसर बंडल। – Ren

0

किसी भी इकाई में कम से कम एक फ़ील्ड होना चाहिए।

आप बुक इकाई में कम से कम एक क्षेत्र को जोड़ना होगा

उदाहरण

/** 
* @Orm\MappedSuperclass 
*/ 
class Book extends Object 
{ 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
    private $id; 
} 
0

मैं एक ही त्रुटि संदेश था लेकिन मुझे कोई दूसरा गलती की थी:

कक्षा बी एक आईडी था और क्लास ए जो भी एक आईडी (सुरक्षित, निजी नहीं) था बढ़ाया। तो मुझे कक्षा बी

2

से आईडी को हटाना पड़ा था, मुझे yml फ़ाइल में परिभाषाओं को जोड़ने के बाद भी एक ही समस्या थी। मैं एक वर्ग के लिए वजन & अधिकतम वजन जोड़ने की कोशिश कर रहा था और हो रही थी:

Duplicate definition of column 'weight_value' on entity 'Model\ClientSuppliedProduct' in a field or discriminator column mapping.

तब मुझे एहसास हुआ कि यह columnPrefix की आवश्यकता है क्षेत्रों के समान प्रकार के अलग होने की और जोड़ने YML में निम्नलिखित मेरे लिए इसे हल:

`maxWeight:` 
    `class: Model\Weight` 
    `columnPrefix: max_weight_` 
2

मुझे एक ही समस्या और त्रुटि संदेश था, लेकिन मेरे लिए यह @ user2090861 के रूप में अन्य तरीका था।

मैं (अप्रयुक्त) को हटाने के

use Doctrine\ORM\Mapping as ORM; 
मेरी इकाई फ़ाइलों से

, कारण मेरा असली मानचित्रण orm.xml फ़ाइलों से आता था।

मुझे आशा है कि मैं अपने उत्तर के साथ कई अन्य लोगों की मदद कर सकता हूं, क्योंकि इस अपवाद ने मुझे पिछले दो दिनों में पागल कर दिया है!

1

कभी-कभी अतिरिक्त कॉन्फ़िगरेशन फ़ाइलों को निकालना असंभव है, क्योंकि ये तीसरे पक्ष के बंडल में स्थित हैं और auto_mapping सक्षम है।

इस मामले में आप में app/config.yml

doctrine: 
orm: 
    entity_managers: 
     default: 
      mappings: 
       SonataMediaBundle: { mapping: false } 
संबंधित मुद्दे