2012-05-01 34 views
6

मैं सिम्फनी 2 ढांचे में निर्मित सिद्धांत 2 का उपयोग कर डेटाबेस विरासत के साथ निम्न समस्या का समाधान खोज रहा हूं। यह मुझे क्या करना चाहते है ...सिम्फनी 2 + सिद्धांत 2 + विरासत

enter image description here

मैं सार वर्ग Hodiny रूप में एक ही इंटरफ़ेस के साथ दो तालिकाओं (UredniHodiny, KonzultacniHodiny) बनाना चाहते हैं। यह जब मैं चलाने php app/console doctrine:generate:entities CvutPWTImportBundle Symfony दोनों बच्चे कक्षाओं के लिए निजी चर के रूप में वर्ग Hodiny से सभी चर (अधिक सटीक कॉलम) उत्पन्न करता है मैं इसे कैसे

<?php 

// src/CvutPWT/ImportBundle/Entity/Hodiny.php 
namespace CvutPWT\ImportBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\MappedSuperclass 
*/ 
abstract class Hodiny 
{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Osoba") 
    */ 
    protected $osoba; 

    /** 
    * @ORM\ManyToOne(targetEntity="Mistnost") 
    */ 
    protected $mistnost; 

    /** 
    * @ORM\Column(type="datetime") 
    */ 
    protected $zacatek; 

    /** 
    * @ORM\Column(type="datetime") 
    */ 
    protected $konec; 

} 


<?php 

// src/CvutPWT/ImportBundle/Entity/KonzultacniHodiny.php 
namespace CvutPWT\ImportBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="konzultacnihodiny") 
*/ 
class KonzultacniHodiny extends Hodiny 
{ 

} 

<?php 

// src/CvutPWT/ImportBundle/Entity/UredniHodiny.php 
namespace CvutPWT\ImportBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="urednihodiny") 
*/ 
class UredniHodiny extends Hodiny 
{ 

} 

करने के लिए अब कोशिश कर रहा हूँ है। अब जब मैं app/console doctrine:schema:update --force के साथ उन तालिकाओं को बनाने की कोशिश कर रहा हूं तो मुझे $id must be protected or weaker त्रुटियां मिल रही हैं। जब मैं मैन्युअल रूप से इस सुरक्षा को बदलता हूं तो मैं टेबल बनाने में सक्षम हूं लेकिन केवल एक कॉलम (आईडी) है। लेकिन यह वह नहीं है जिसे मैं उम्मीद कर रहा था। क्या कोई मुझे कोई सलाह दे सकता है कि मैं क्या गलत कर रहा हूं?

+0

अरे, यह मेरे लिए अपेक्षित काम करता है। मुझे 'Konzultacnihodiny' नामक एक टेबल मिलती है और' urednihodiny 'नामक एक तालिका होती है जिसमें दोनों में 5 फ़ील्ड होते हैं। नोट मुझे दो अन्य इकाइयों को जोड़ने की भी आवश्यकता है क्योंकि वे वर्तमान में होडीनी बेस क्लास में एफके हैं। आपको यह भी पुष्टि करनी चाहिए कि [विरासत प्रकार] (http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html) आप उपयोग करना चाहते हैं क्योंकि एक से अधिक है। – Shane

उत्तर

8

यह तालिका विरासत नहीं है। मैप किए गए सुपर क्लासेस सिर्फ विरासत मैपिंग कर रहे हैं। आपकी अंतिम संस्थाओं से संबंधित सारणी किसी भी तरह से एक साथ भरोसा नहीं किया जाएगा।

आप वास्तविक तालिका विरासत (एकल मेज या में शामिल हो गए तालिका) चाहते हैं, इस का उपयोग करें: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance

आप अभी भी मैप की सुपर वर्गों का उपयोग करना चाहते हैं, तो आप दोनों अंतिम कक्षाओं में @ORM\Id परिभाषा डाल करने के लिए होगा। आप मैप किए गए सुपर क्लास में आईडी डाल सकते हैं।

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