2011-11-15 125 views
20

我正在開發使用zend框架和doctrine2.1。具有多個索引的學說2

我已經從數據庫生成實體。

但問題是:教義不識別我的索引。它們在實體註釋中根本沒有標記。

當我去驗證模式和從orm:schema-tool:update --dump-sql轉儲SQL時,它會生成sql以刪除整個數據庫中的所有索引。

我發現,學說有以下用於定義索引的註釋:

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

但是,這讓我可以定義多個列一個指標,我並不真的需要這一點。
我想要的是能夠在多列上定義多個索引,每列一個索引。

有沒有辦法實現這個目標?有沒有一種方法可以讓我定義多個索引的註釋。

回答

31

我會說你可以在索引屬性插入多個索引(但並沒有測試它的時間):

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

希望這有助於你

+0

謝謝你的迴應。它現在工作。非常感謝你。 – dennisg

+0

在哪裏申報? –

+2

您在類doc文件夾中的實體旁邊的表中聲明它 – David

9

下面是一個例子:

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

}