2014-10-14 7 views
6

Ho trovato il following example in the doctrine documentation in cui hanno aggiunto la mappatura a un tratto:Doctrine 2: esiste un modo per ereditare il mapping da un tratto usando yaml o 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; 
} 

Sto cercando di mappare un tratto senza dover duplicare la mappatura nelle classi che ereditano esso. Non ho onestamente provato questo come il mio progetto attuale sta usando yaml per il mapping ma sembra che una normale classe php erediterebbe anche il mapping quando si usa il carattere.

C'è un modo per ereditare la mappatura per questo tratto senza usare associazioni ma usando invece yaml o xml? Ho provato a impostare il tratto come mapped superclass ma non ha funzionato, ma fondamentalmente sto cercando lo stesso tipo di idea.

Grazie.

risposta

0

Dichiarare mappedSupperClass con YAML:

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

     ... other fields and relations 

di dichiararla con 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> 

Se si esegue app/console doctrine:generate:entities si sarà in grado di utilizzare come mappedSuperClass ascendente in altre entità.