2013-08-20 15 views
21

मैं ज़ेंड फ्रेमवर्क 2 में सिद्धांत 2 का उपयोग कर रहा हूं। नीचे मेरी इकाई फ़ाइल है। समस्या यह है कि, जब मैंने स्कीमा का उपयोग करके स्कीमा को सत्यापित करने का प्रयास किया,तालिका पहले से मौजूद है

./vendor/bin/doctrine-module orm:validate-schema 

कमांड।

मैं त्रुटि हो रही है,

[Doctrine\DBAL\Schema\SchemaException]        
The table with name 'database.opportunitycriteria' already exists. 

मुझे क्या करना चाहिए?

namespace Administration\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* OpportunityCriteria 
* 
* @ORM\Table(name="OpportunityCriteria") 
* @ORM\Entity 
*/ 
class Criteria 
{ 
/** 
* @var integer 
* @ORM\Id 
* @ORM\Column(name="criteria_id", type="integer", nullable=false) 
*/ 
private $criteria_id; 

/** 
* @var string 
* 
* @ORM\Column(name="description", type="string", nullable=false) 
*/ 
private $description; 
} 

और उचित मनुष्य और सेटर तरीके ..

+0

क्या कोई कक्षा एक इकाई वर्ग है जिसका नाम अवसर काउंटरिया है? –

+7

दिखने से इसका मतलब यह है कि आपकी कुछ इकाई वर्गों में इस लाइन को दो बार दोहराया जाता है, फिर 1 बार @ORM \ Table (name = "अवसर क्रिटोरिया") अब इस प्रकार की गलती आमतौर पर तब होती है जब हम कॉपी/पेस्ट –

+0

I द्वारा कोड करते हैं। मुझे यह त्रुटि मिल रही है और @ORM \ तालिका के लिए इकाई निर्देशिका की खोज करने से केवल तालिका के नाम के लिए एक घटना दिखाई देती है। (इस प्रकार की गलती आमतौर पर होती है जब आप चीजें मानते हैं।) – Scott

उत्तर

15

मैं अंत में यह समझ से बाहर। ओपी का उपयोग मामला अलग हो सकता है, लेकिन मेरे मामले में, यह एक गलत कॉन्फ़िगर किए गए बिडरेक्शनल कई से कई रिश्ते के कारण था।

class Cuisine { 
    /** 
    * @ManyToMany(targetEntity="Dish") 
    * @ORM\JoinTable(name="CuisineDish", ...) 
    */ 
    protected $dishes; 
} 

class Dish { 
    /** 
    * @ORM\ManyToMany(targetEntity="Cuisine") 
    * @ORM\JoinTable(name="CuisineDish", ...) 
    */ 
    protected $cuisines; 
} 

क्या याद आ रही थी था @ManyToMany एनोटेशन की inversedBy और mappedBy गुण:

मैं निम्नलिखित संस्थाओं था। ये केवल तब आवश्यक होते हैं जब एसोसिएशन द्वि-दिशात्मक होता है।

तो अब सही ढंग से मैप किया संस्थाओं देखो की तरह:

class Cuisine { 
    /** 
    * @ManyToMany(targetEntity="Dish", inversedBy="cuisines") 
    * @ORM\JoinTable(name="CuisineDish",) 
    */ 
    protected $dishes; 
} 

class Dish { 
    /** 
    * @ORM\ManyToMany(targetEntity="Cuisine", mappedBy="dishes") 
    * @ORM\JoinTable(name="CuisineDish", ...) 
    */ 
    protected $cuisines; 
} 

और orm:validate-schema एक किसी भी अधिक अपवाद के साथ बाहर निकलने नहीं करता है।

अपवाद संदेश सिर्फ भ्रामक है, क्योंकि इस ऑपरेशन द्वारा डेटाबेस को बदला नहीं गया है। इसके अलावा, यह समस्या केवल डेटाबेस के साथ सिंक को सत्यापित करते समय देखी जाती है, न कि केवल मैपिंग को मान्य करते समय (--skip-sync), जहां इसे करना चाहिए।

मैं बस reported this bug

0

यह इस त्रुटि संदेश का कारण बन सकता है यदि आप किसी तालिका नाम का उपयोग करना चाहते हैं जो पहले से स्थापित बंडलों में से किसी एक द्वारा उपयोग किया जाता है।

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