如何将具有 Doctrine 2 的 INDEX 添加到列而不使其成为主键?

问题描述 投票:0回答:5

我想向 MySQL 数据库中的表列添加索引。我正在使用 Doctrine 2 创建我的数据库模式。

我知道我可以使用

/** @Id @Column(type="integer") */

创建主键。但我的专栏既不具有

unique
也不具有
primary key
属性。它只是我表中的一个
index
(MySQL 知道这三种类型)。

创建这样的索引的正确语句是什么?

mysql indexing doctrine-orm
5个回答
102
投票

如果您想使用原则,表必须有主键,请参阅:

每个实体类都必须有一个标识符/主键。您可以使用

@Id
注释选择用作标识符的字段。
参考:标识符和主键

创建索引:注释参考

<?php
/**
 * @Entity
 * @Table(name="ecommerce_products",indexes={
 *     @Index(name="search_idx", columns={"name", "email"})
 * })
 */
class ECommerceProduct
{
}

请注意,仅当您从 PHP 代码生成架构时才会使用此功能。因此,如果您的表已经存在,您也可以自己添加索引。


54
投票

当你使用 Doctrine 和 ORM 时:

@ORM\Table(indexes={@ORM\Index(name="name_idx", columns={"name"})})

23
投票

与 PHP8 属性一起使用

#[ORM\Index]
:

<?php
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
#[ORM\Index(columns: ['column_name'], name: 'columns_idx')]
class FooBar
{
    /* ... */

    #[ORM\Column]
    private bool $columnName = false;

    /* ... */
}

参见:https://www.doctrine-project.org/projects/doctrine-orm/en/2.13/reference/attributes-reference.html#attrref_index


13
投票

如果您使用带有教义的 Symfony,您还需要

use
Index
类才能使注释正常工作

use Doctrine\ORM\Mapping\Index;

8
投票

部分工作代码

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CountryRepository")
 * @ORM\Table(indexes={@ORM\Index(columns={"slug"})})
 */
class Country extends AbstractTrans implements SuggesterItem
© www.soinside.com 2019 - 2024. All rights reserved.