2011-11-15 9 views
20

私はzend frameworkとdoctrine2.1を使って開発しています。複数のインデックスを持つDoctrine 2

データベースからエンティティを生成しました。

しかし、問題はDoctrineが私のインデックスを認識しないことです。エンティティアノテーションにはマークが付けられていません。

orm:schema-tool:update --dump-sqlからvalidate-schemaとdump sqlを実行すると、データベース全体ですべてのインデックスを削除するsqlが生成されます。

私はDoctrineはインデックスを定義するために使用注釈以下のしていることが見つかりました:

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

をしかし、これは私が複数の列のための一つの指標を定義することができますし、私は本当にそれを必要としません。
私が望むのは、複数の列に複数のインデックスを定義する機能です。列ごとに1つのインデックスです。

私はこれを達成する方法はありますか?複数のインデックスを定義するアノテーションを持つことができる方法はありますか?私はあなたがインデックスプロパティに複数のインデックスを挿入することができます(ただし、それをテストする時間を持っていなかった)と言うでしょう

答えて

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; 

} 
関連する問題