2015-04-03 6 views
5

उत्पन्न करने का प्रयास करते समय मेरे पास एक बहुत ही सरल डेटाबेस है जिसे मैं आयात करने की कोशिश कर रहा हूं, और संस्थाएं बना रहा हूं। सिद्धांत (सिम्फनी) डेटाबेस से वाईएमएल मैपिंग फाइलें उत्पन्न करने में सक्षम है। लेकिन जब मैं subsiquently संस्थाओं उत्पन्न करने के लिए प्रयास करते हैं, मैं निम्नलिखित त्रुटि मिलती है:Symfony2/Doctrine2 अमान्य मैपिंग फ़ाइल अपवाद

[Doctrine\Common\Persistence\Mapping\MappingException] 
Invalid mapping file 'SandboxBundle.Entity.Product.orm.yml' for class 
'SandboxBundle\Entity\Product'. 

YML फ़ाइल, मेरे लिए ठीक लग रहा है के रूप में हम किया जा रहा है कि यह सिद्धांत द्वारा उत्पन्न की गई उम्मीद करेंगे। बस सुनिश्चित करने के लिए, मैंने इसे एक ऑनलाइन वाईएमएल सत्यापनकर्ता के खिलाफ चेक किया जिसने कहा कि यह ठीक था। आदेश मैं संस्थाओं उत्पन्न करने के लिए प्रयास करने के लिए इस्तेमाल किया गया था:

app/console generate:doctrine:entities sandbox 

.yml फ़ाइलों का पालन करें। कृपया किसी भी वाईएमएल स्पेसिंग त्रुटियों से क्षमा करें जो फ़ाइल को चिपकाने के परिणामस्वरूप हैं। जैसा कि मैंने कहा, yml फ़ाइलों को सिद्धांत द्वारा उत्पन्न किया गया था, और एक ऑनलाइन सत्यापन पास किया था।

Product: 
    type: entity 
    table: product 
    indexes: 
     category_id: 
      columns: 
       - category_id 
    id: 
     id: 
      type: integer 
      nullable: false 
      unsigned: false 
      comment: '' 
      id: true 
      generator: 
       strategy: IDENTITY 
    fields: 
     productname: 
      type: string 
      nullable: true 
      length: 10 
      fixed: false 
      comment: '' 
     categoryId: 
      type: integer 
      nullable: true 
      unsigned: false 
      comment: '' 
      column: category_id 
lifecycleCallbacks: { } 

और पूर्णता के लिए, यहां श्रेणी yml फ़ाइल है। त्रुटि उत्पाद पर थी, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि उत्पाद को पहले संसाधित किया गया था।

Category: 
    type: entity 
    table: category 
     id: 
      id: 
       type: integer 
       nullable: false 
       unsigned: false 
       comment: '' 
       id: true 
       generator: 
        strategy: IDENTITY 
     fields: 
      categoryname: 
       type: string 
       nullable: true 
       length: 50 
       fixed: false 
       comment: '' 
     lifecycleCallbacks: { } 

मैं मानचित्रण अपवाद के निदान से संबंधित किसी भी संसाधनों के लिए वेब खोज की है, लेकिन किसी भी नहीं मिला है। मुझे लगता है कि वाईएमएल फाइलों में कुछ ऐसा है जो इकाई जनरेटर को चकित कर रहा है। लेकिन त्रुटि संदेश यह संकेत नहीं देता कि यह क्या हो सकता है। मुझे लगता है कि स्टैक ओवरफ्लो पर इस तरह के प्रश्न के कई उदाहरण हैं। इन प्रकार की त्रुटियों का निदान करने के बारे में जानकारी प्राप्त करना बहुत अच्छा होगा, और इस प्रकार इसे अपने लिए समझने में सक्षम होना चाहिए।

+0

डॉन, यह एक समाधान नहीं है, लेकिन यदि आप करते 'वर्बोज़' विकल्प के साथ अपनी 'जेनरेट एंटिटीज "कमांड चलाने का विकल्प है। यह आपको एक PHP स्टैक डंप प्रदान करेगा, और फिर आप कम से कम क्या देख रहे हैं, कम से कम देखने के लिए, सिद्धांत कोड में खुदाई शुरू कर सकते हैं। मैं, हालांकि, सुझाव देते हैं कि यदि आप विक्रेता कोड में चारों ओर घूमना शुरू कर रहे हैं, तो डायग्नोस्टिक 'print_' कथन जोड़ना, और जैसा कि आप इसे सिम्फनी के एक परीक्षण उदाहरण में करते हैं जिसे आप विशेष रूप से इस उद्देश्य के लिए बनाते हैं। यही वह है जो मैंने किया –

उत्तर

10

doc में वर्णित है:

class-names specified in the YAML files should be fully qualified.

तो इस प्रकार उत्पाद YAML परिभाषा बदलने की कोशिश:

SandboxBundle\Entity\Product: 
    type: entity 
    table: product 
    indexes: 
    ..... 

अन्य मानचित्रण फ़ाइलों में भी यही करें।

आशा इस मदद

+0

नहीं, यहां तक ​​कि जब मैंने पूरी तरह से योग्य नाम जोड़ा, तब भी वही त्रुटि मिली। जैसा कि मैंने कहा, इन वाईएमएल फाइलों को सिद्धांत द्वारा उत्पन्न किया गया था। लेकिन प्रयास के लिए धन्यवाद। –

0

उपयोग

php एप्लिकेशन/कंसोल सिद्धांत: उत्पन्न: इकाई

सिद्धांत द्वारा स्वचालित रूप से एक इकाई उत्पन्न करने के लिए। आप

एप्लिकेशन/कंसोल सिद्धांत का इस्तेमाल किया है: उत्पन्न: संस्थाओं EntityName

मेरा मतलब है

एप्लिकेशन/कंसोल उत्पन्न: सिद्धांत: संस्थाओं EntityName

(नोटिस बहुवचन "संस्थाओं" शब्द) आपका आदेश मौजूदा इकाई की अद्यतन संपत्ति उत्पन्न करना और उसके गेटर और सेटर विधियों को उत्पन्न करना है, लेकिन एक इकाई उत्पन्न नहीं करना है।

मेरे सुझाव है:

  1. मौजूदा इकाई
  2. हटाएँ फिर से उचित आदेश का उपयोग कर उन्हें उत्पन्न करें।
2

कोशिश

Product.orm.yml 

करने के लिए फ़ाइल

SandboxBundle.Entity.Product.orm.yml 

नाम बदलने और

SandboxBundle\Entity\Product: 
type: entity 
table: product 
indexes: 
..... 

आप क्योंकि त्रुटि आ सकती है पूरी तरह से YAML में अपना नाम अर्हता प्राप्त करने के सुनिश्चित करने के लिए डबल नेमस्पेस का। सिम्फनी नाम के स्थान पर फ़ाइल के बिंदीदार हिस्से को जोड़ता है।

[Doctrine\Common\Persistence\Mapping\MappingException] 
Invalid mapping file 'SandboxBundle.Entity.SandboxBundle.Entity.Product.orm.yml' for class 
'SandboxBundle\Entity\SandboxBundle\Entity\Product'. 

गुड लक :)

+0

क्यू पर सही !!!! –

0

हाल ही में मैं इसी तरह की "MappingException: अमान्य मैपिंग फ़ाइल" सामना कर रहा था निम्नलिखित कोड का उपयोग करके अपवादों:

//bootstrap.php 
$config = Setup::createYAMLMetadataConfiguration(array(__DIR__ . 
"/../config/dcm"), $isDevMode); 

का उपयोग Symfony YAML 2. *, सब कुछ ठीक काम किया । लेकिन सिम्फनी याम^3.3 के साथ मुझे अमान्य मैपिंग फ़ाइल अपवाद मिलेगा। मैंने यह पता लगाया कि अलग-अलग यम पुस्तकालय पार्स कैसे कार्य करता है।

// vendor/doctrine/orm/lib/Doctrine/Orm/Mapping/Driver/YamlDriver.php 
protected function loadMappingFile($file) 
{ 
    return Yaml::parse($file); 
} 

YAML 2. * में, समस्या के बिना काम करता है पार्स करने के लिए एक फ़ाइल नाम स्ट्रिंग गुजर, लेकिन YAML^3.3 के साथ: सिद्धांत का उपयोग करते समय YAML फ़ाइलें पार्स करने के लिए है, यह YamlDriver वर्ग जो इस समारोह का उपयोग कर YAML फ़ाइलों को लोड करता है का उपयोग करेगा , पार्स फ़ंक्शन एक यम स्ट्रिंग की अपेक्षा करता है। कुछ मायनों इस के आसपास पाने के लिए एक्सएमएल config फ़ाइलों का उपयोग कर या अपना स्वयं का YAML ड्राइवर लेखन और सेटअप :: createYAMLMetadataConfiguration दरकिनार द्वारा config प्राप्त करने और इस कोड का उपयोग में शामिल हैं:

$config = self::createConfiguration($isDevMode, $proxyDir, $cache); 
$config->setMetadataDriverImpl(new \MyNamespace\YamlDriver($paths)); 

return $config; 
संबंधित मुद्दे