2013-01-01 38 views
16

मैं Symfony2 docs के साथ जाता हूं। यह कहा जाता है कि मेरा इकाई फ़ाइल मेंसिम्फनी 2 सिद्धांत: जेनरेट करें: संस्थाएं रेपो कक्षाएं उत्पन्न नहीं करती हैं

/** 
* @ORM\Entity(repositoryClass="Acme\StoreBundle\Entity\ProductRepository") 
*/ 

जोड़ने और php app/console doctrine:generate:entities Acme चल ProductRepository फ़ाइल बनाने चाहिए। यह नहीं है मैं इसे और अधिक स्पष्ट नहीं कर सकता, यह सिर्फ उस फ़ाइल को नहीं बनाता है, बस उन इकाई फ़ाइलों को दोबारा शुरू करता है जो पहले थे।

+0

आप कैसे जांच रहे हैं कि फाइलें मौजूद नहीं हैं? यदि यह एक आईडीई के अंदर है, तो रीफ्रेश करने का प्रयास करें। आदेश रिपोजिटरी फ़ाइलों को उत्पन्न करने के बारे में कुछ भी नहीं कहता है, लेकिन वैसे भी उन्हें उत्पन्न करता है। – smottt

+0

आईडीई और विंडोज़ एक्सप्लोरर दोनों के माध्यम से। –

उत्तर

26

मैं एक ही मुद्दा

हो रहा है लेकिन मैं इस सवाल का जवाब यहाँ मिल गया है: http://brentertainment.com/other/docs/book/doctrine/orm.html

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

सरल, हम हाथ से यह करने के लिए है क्योंकि हम पहले से ही समाप्त हो गया है है इस बार

+2

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

+0

हां क्रिस, यह मामला नहीं है: आप सही हैं। मेरे लिए पीढ़ी अभी भी काम नहीं करती है। दस्तावेज में स्पष्ट रूप से टोमेक द्वारा प्रश्न में समझाया गया पथ का पालन किया गया है: सबसे पहले आप एंटिटी क्लास (डॉकू उदाहरणों में उत्पाद) बनाते हैं; फिर, रिपॉजिटरी क्लास को एनोटेशन में निर्दिष्ट करने के बाद, आप कमांड सिद्धांत को पुन: चालू करते हैं: जेनरेट करें: इकाइयां और सिद्धांत को एक नई फ़ाइल ProductRepository.php बनाना चाहिए (जो वर्तमान में मौजूद नहीं है, केवल product.php मौजूद है, और पहली बार जेनरेट किया गया था जेनरेट कमांड लॉन्च किया गया था। – Aerendir

+1

सिम्फनी 2.7 में आप एंटीटी और रिपोजिटरी क्लासेस दोनों उत्पन्न करने के लिए इस कमांड का उपयोग करते हैं: "php ऐप/कंसोल सिद्धांत: जेनरेट करें: इकाई - वेंटिटी विज़िटरडाटा - साथ-रिपोजिटरी" – Dung

8

आप एक विशेष बंडल निर्दिष्ट करने के लिए कोशिश कर सकते हैं:

php app/console doctrine:generate:entities AcmeStoreBundle

नोट मैं पूर्ण है बंडल नाम।

इससे पहले कि आप doctrine:generate:entities चलाते हैं, यह भी मदद करनी चाहिए।

1

इस समस्या से छुटकारा पाने और रेपो कक्षाएं बनाने के लिए, आप कर सकते हैं अस्थायी निम्न फ़ाइल के अंत संशोधित: सिम्फोनी \ विक्रेता \ सिद्धांत \ सिद्धांत-बंडल \ सिद्धांत \ बंडल \ DoctrineBundle \ कमान \ generateEntitiesDoctrineCommand। php

if ($m->customRepositoryClassName 
    && false !== strpos($m->customRepositoryClassName, $metadata->getNamespace())) { 
    $repoGenerator->writeEntityRepositoryClass(
     $m->customRepositoryClassName, $metadata->getPath()); 
} 

निम्न कोड के साथ:

if (true) { 
    $output->writeln(
    sprintf(' > AND Repository <comment>%s</comment>', $m->name . "Repository") 
    );   
    $repoGenerator->writeEntityRepositoryClass(
    $m->name . "Repository", $metadata->getPath()); 
} 

कुछ स्पष्टीकरण: इस कोड में,

  • हालत 'अगर (सही)' के साथ सरल है अगर (और अगर आप चाहते हैं अंत में पूरी तरह से दबा दिया जा सकता है)
  • $ m-> customRepositoryClassNameद्वारा$ बदल दिया जाता है एम-> नाम। "रिपोजिटरी"
  • मैंने रिपो फाइलें उत्पन्न होने पर कुछ आउटपुट अच्छी तरह से सूचित (टर्मिनल विंडो में) जोड़ने के लिए जोड़ा।

आप 'अगर (सही)' हालत उपयोग नहीं करते हैं, और खुद ही बातों की जांच करना चाहते हैं, तो आप भी एक निर्गम के साथ एक ऐच्छिक किसी और मामले में जोड़ सकते हैं अच्छी तरह से भविष्य में सूचित करने के लिए:

else { 
     $output->writeln(sprintf(' > NO repository generated for this class')); 
    } 

संशोधनों के बाद, आप हमेशा की तरह आदेश को फिर से चला सकते हैं:

php app/console doctrine:generate:entities AcmeStoreBundle 

यह एक अस्थायी कोड है केवल बातें, क्योंकि समस्या अब तक मेरे लिए बहुत स्पष्ट नहीं है, मैं से ई है कि यह $ m-> customRepositoryClassName से आता है जो एक खाली स्ट्रिंग देता है। तो, एक और और निश्चित समाधान खोजने के लिए, एक तरह से मेटाडाटा वस्तु की विधि customRepositoryClassName जाँच करने के लिए हो सकता है ...

-3

Astucieux के जवाब में आधारित:

if (true) { 
    $fullRepositoryClassName = $name . "\\Repository\\" . $basename . "Repository"; 
    $output->writeln(
     sprintf(' > AND Repository <comment>%s</comment>', $fullRepositoryClassName) 
    );   
    $repoGenerator->writeEntityRepositoryClass(
     $fullRepositoryClassName, $metadata->getPath()); 
} 
+1

इसका क्या अर्थ होना चाहिए? – Aerendir

8

आप फ़ाइलों orm.yml उपयोग कर रहे हैं आपके संस्थाओं उत्पन्न करने के लिए, आप repositoryClass परिभाषित कर सकते हैं, और तब पुन संस्थाओं उत्पन्न:

Acme\StoreBundle\Entity\Product: 
type: entity 
table: product 
... 
repositoryClass: Acme\StoreBundle\Entity\ProductRepository 
... 

और फिर चलाएँ:

php app/console doctrine:generate:entities AcmeStoreBundle 
2

यह करने के लिए सुपर आसान उपाय:

एक इकाई उत्पन्न करता है, तो आप पहले से ही नहीं है: अब

* @ORM\Table(name="TABLENAME") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\EntityNameRepository") 

:

php app/console doctrine:generate:entity --entity="AppBundle:EntityName" --fields="id:string(255) content:text(100)" 

अब पुरानी जनित इकाई के लिए इन टिप्पणी लाइनों को संशोधित , बस चलाएं:

php app/console doctrine:generate:entities AppBundle:EntityNameRepository 

अब आपके पास एक इकाई और भंडार है। :)