具有多个索引的主义2

den*_*isg 23 mysql indexing annotations doctrine-orm

我正在使用zend框架和doctrine2.1进行开发.

我从数据库生成了实体.

但问题是:Doctrine无法识别我的索引.它们根本没有在实体注释中标记.

当我去验证模式并从中转储sql时orm:schema-tool:update --dump-sql,生成sql以删除整个数据库中的所有索引.

我发现Doctrine有以下用于定义索引的注释:

indexes={@index(name="index_name",
                columns={"database_column1","database_column2"}
        )}
Run Code Online (Sandbox Code Playgroud)

但这允许我为多列定义一个索引,我真的不需要它.
我想要的是能够在多列上定义多个索引,每列一个索引.

有没有办法实现这个目标?有没有一种方法可以让我有一个定义多个索引的注释.

Kri*_*van 40

我会说你可以在索引属性中插入多个索引(但没有时间来测试它):

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"})
}
Run Code Online (Sandbox Code Playgroud)

希望这对你有所帮助

  • 您可以在类doc块中的Entity旁边的Table中声明它 (2认同)

Dav*_*vid 10

这是一个例子:

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

}
Run Code Online (Sandbox Code Playgroud)