2011-11-15 23 views
20

Sto sviluppando utilizzando zend framework e doctrine2.1.Doctrine 2 con più indici

Ho generato entità dal database.

Ma il problema è: Doctrine non riconosce i miei indici. Non sono affatto segnati nelle annotazioni di entità.

E quando vado a validate-schema e scarico sql da orm:schema-tool:update --dump-sql genera sql per eliminare tutti i miei indici nell'intero database.

ho scoperto che Doctrine ha seguente annotazione utilizzato per la definizione degli indici:

indexes={@index(name="index_name", 
       columns={"database_column1","database_column2"} 
     )} 

Ma questo mi permette di definire un indice per più colonne e non ho davvero bisogno di questo.
Quello che voglio è la possibilità di definire più indici su più colonne, un indice per colonna.

C'è un modo per ottenerlo? C'è un modo in cui posso avere annotazioni che definiscono più indici.

risposta

31

Direi che si possono inserire più indici nella proprietà indici (ma non ha avuto il tempo di provarlo):

indexes={ 
@ORM\Index(name="index_name", columns={"database_column1","database_column2"}), 
@ORM\Index(name="index_name2", columns={"database_column1"}), 
@ORM\Index(name="index_name3", columns={"database_column2"}) 
} 

Spero che questo ti aiuta

+0

Grazie per la risposta. Funziona per ora. Grazie mille. – dennisg

+0

Dove dichiararlo? –

+2

Lo si dichiara nella tabella accanto a Entity nel blocco doc della classe – David

9

Ecco un esempio:

/** 
* @Entity 
* @Table(name="serial_number",indexes={ 
* @index(name="product_idx", columns={"product_id"}), 
* }) 
*/ 
class SerialNumber { // Entity Class 

    /** 
    * @var int 
    * 
    * @Id 
    * @GeneratedValue 
    * @Column(type="integer") 
    */ 

    protected $id; 

    /** 
    * @Column(name="created_at", type="datetime") 
    * @var \DateTime 
    * */ 
    protected $created; 

    /** 
    * @Column(name="updated_at", type="datetime") 
    * @var \DateTime 
    * */ 
    protected $updated; 

    /** 
    * @Column(name="product_id", type="integer") 
    */ 
    protected $productID; 

}