2013-12-13 7 views
5

sono nuovo in Doctrine 2 sto cercando di capire come fare l'ereditarietà dell'indice con esso.Doctrine 2 Index Eredità

Quello che sto cercando di ottenere è avere una classe base che definisce alcune colonne di default insieme agli indici necessari per tutte le entità all'interno dell'applicazione.

Esempio: tutte le tabelle nella mia applicazione avranno created_on e modified_on, quindi ho preparato una base @MappedSuperclass con quelle 2 colonne in essa.

Ecco il mio codice:

<?php 

/** 
* @MappedSuperclass 
*/ 
abstract class EntityAbstract 
{ 
    /** 
    * @Column(type="datetime", name="created_on", nullable=false) 
    */ 
    protected $createdOn; 

    /** 
    * @Column(type="datetime", name="modified_on", nullable=true) 
    */ 
    protected $modifiedOn; 

} 

/** 
* @Entity 
* @Table(name="member", indexes={@Index(name="credential", columns={"email_address", "password"})}) 
*/ 
class Member extends EntityAbstract 
{ 
    /** 
    * @Column(type="string", name="full_name", length=50) 
    */ 
    protected $fullName; 

    /** 
    * @Column(type="string", name="email_address", length=50, unique=true, nullable=false) 
    */ 
    protected $emailAddress; 

    /** 
    * @Column(type="string", name="password", length=40, nullable=false) 
    */ 
    protected $password;  

} 
?> 

voglio rispettare created_on ad essere un indice, così ho messo @Index annotazione nella classe base per questa particolare colonna. Sperando che questo comporterà 2 indici per Member che è la combinazione created_on e email_address + password. Ciò tuttavia porta gli indici della classe base a essere sovrascritti dalla classe figlio, pertanto created_on non è un indice.

/** 
* @MappedSuperclass 
* @Table(indexes={@Index(name="timestampcreated", columns={"created_on"})}) 
*/ 
abstract class EntityAbstract 

Come ottengo ciò in Doctrine 2? Ho esaminato l'ereditarietà di una singola tabella, ma la mia comprensione è che è pensato per scopi diversi.

risposta

1

Volevo fare la stessa cosa, ma @Table non è consentito nelle classi @mappedSuperclass. Ho postato sulla questione Doctrine2 github pagina https://github.com/doctrine/doctrine2/issues/5928 e la risposta è:

@Table non è valida su un mappedsuperclass.

Quando ci si pensa è logico, ma ancora, sarebbe bello se ci fosse tale funzionalità, di ereditare indici e altre dichiarazioni.