2011-11-15 5 views
20

Rozwijam się za pomocą Zend Framework i Doctrine2.1.Doctrine 2 z wieloma indeksami

Wygenerowałem jednostki z bazy danych.

Ale problem jest następujący: Doctrine nie rozpoznaje moich indeksów. Nie są one w ogóle zaznaczone w adnotacjach podmiotu.

A kiedy przejdę do sprawdzania poprawności schematu i zrzutu sql z orm:schema-tool:update --dump-sql generuje on sql, aby upuścić wszystkie moje indeksy w całej bazie danych.

stwierdziliśmy, że doktryna dopiskiem służącego do definiowania indeksów:

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

Ale to pozwala mi określić jeden indeks dla wielu kolumn, a ja naprawdę nie potrzebujemy.
To, czego chcę, to możliwość definiowania wielu indeksów na wielu kolumnach, jeden indeks na kolumnę.

Czy mogę to osiągnąć? Czy istnieje sposób, że mogę mieć adnotację, która definiuje wiele indeksów.

Odpowiedz

31

powiedziałbym można wstawić wiele indeksów w nieruchomości indeksy (ale nie miałem czasu, aby go przetestować):

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

Nadzieja to pomaga

+0

Dziękuję za odpowiedź. Działa na razie. Dziękuję Ci bardzo. – dennisg

+0

Gdzie zgłosić to? –

+2

Deklarujesz go w tabeli obok elementu w bloku doc ​​do klasy – David

9

Oto przykład:

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

}