2014-10-14 10 views
6

znalazłem following example in the doctrine documentation gdzie mają dodaje mapowanie do cechę:Doctrine 2: Czy istnieje sposób dziedziczenia mapowania od cechy za pomocą yaml lub xml?

/** 
* Trait class 
*/ 
trait ExampleTrait 
{ 
    /** @Id @Column(type="string") */ 
    private $id; 

    /** 
    * @Column(name="trait_foo", type="integer", length=100, nullable=true, unique=true) 
    */ 
    protected $foo; 

    /** 
    * @OneToOne(targetEntity="Bar", cascade={"persist", "merge"}) 
    * @JoinColumn(name="example_trait_bar_id", referencedColumnName="id") 
    */ 
    protected $bar; 
} 

próbuję mapować cechę bez konieczności duplikowania mapowanie w zajęciach, które je dziedziczą. Nie szczerze próbowałem tego powyżej, ponieważ mój obecny projekt używa yaml do mapowania, ale wygląda na to, że zwykła klasa php dziedziczyłaby mapowanie również przy korzystaniu z tej cechy.

Czy istnieje sposób dziedziczenia mapowania dla tej cechy bez używania asocjacji, ale zamiast tego używa się yaml lub xml? Próbowałem ustawić tę cechę jako mapped superclass, ale nie działało, ale zasadniczo szukam tego samego rodzaju pomysłu.

Dzięki.

Odpowiedz

0

Aby zadeklarować mappedSupperClass z YAML:

Namespace\For\Your\MappingClass: 
    type: mappedSuperclass 
    fields: 
     id: 
      id: 
       type: integer 
       generator: 
        strategy: AUTO 

     ... other fields and relations 

uznaniu jej z XML:

<?xml version="1.0" encoding="UTF-8"?> 
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping 
        http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> 

    <mapped-superclass name="Namespace\For\Your\MappingClass"> 

     <field name="foo" column="foo" type="string" length="255" /> 

     <field name="bar" column="bar" type="string" length="255" unique="true" /> 

     ... other fields 

    </mapped-superclass> 

</doctrine-mapping> 

Jeśli prowadzisz app/console doctrine:generate:entities będzie można używać mappedSuperClass jako wstępni w innych jednostkach.