2011-11-15 24 views
20

Estoy desarrollando usando zend framework y doctrine2.1.Doctrine 2 con índices múltiples

He generado entidades de la base de datos.

Pero el problema es: Doctrine no reconoce mis índices. No están marcados en las anotaciones de entidad en absoluto.

Y cuando voy a validar-schema y volcar sql desde orm:schema-tool:update --dump-sql genera sql para soltar todos mis índices en toda la base de datos.

me encontré con que ha Doctrina siguiente anotación utilizada para la definición de índices:

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

Pero esto me permite definir un índice de múltiples columnas y yo realmente no necesita eso.
Lo que quiero es la capacidad de definir múltiples índices en múltiples columnas, un índice por columna.

¿Hay alguna manera de lograrlo? ¿Hay alguna manera de que pueda tener una anotación que defina múltiples índices?

Respuesta

31

yo diría que se pueden insertar varios índices en la propiedad índices (pero no ha tenido tiempo de probarlo):

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"}) 
} 

la esperanza que esto le ayuda

+0

Gracias por su respuesta. Funciona por ahora. Muchas gracias. – dennisg

+0

¿Dónde declarar eso? –

+2

Lo declara en la Tabla junto a Entidad en el bloque de documentación de clase – David

9

Aquí se muestra un ejemplo:

/** 
* @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; 

}