如何将一个带有Doctrine 2的INDEX添加到列而不将其作为主键?

Got*_*bel 33 mysql indexing doctrine-orm

我想index在MySQL数据库中添加一个表列.我正在使用Doctrine 2来创建我的数据库方案.

我知道我可以用

/** @Id @Column(type="integer") */
Run Code Online (Sandbox Code Playgroud)

创建主键.但我的专栏既unique没有primary key属性也没有属性.它应该只是index在我的表中(MySQL知道这三种类型).

创建这样一个索引的正确陈述是什么?

Fli*_*lip 58

如果要使用doctrine,则表必须具有主键,请参阅:http://docs.doctrine-project.org/en/latest/reference/basic-mapping.html#identifiers-primary-keys

创建索引:https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#annref_index

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

请注意,只有在从PHP代码生成架构时才会使用此选项.因此,如果您的表已经存在,您也可以自己添加索引.

  • 如果你能在这里提供实际答案而不是链接会更好 (4认同)

web*_*sky 27

当你使用doctrine和orm时:

@ORM\Table(indexes={@ORM\Index(name="name_idx", columns={"name"})})
Run Code Online (Sandbox Code Playgroud)


lon*_*ong 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;

    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

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


Vas*_*cov 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
Run Code Online (Sandbox Code Playgroud)


小智 7

如果您将Symfony与教义结合使用,则还需要use使用Index该类,以使注释正常工作 use Doctrine\ORM\Mapping\Index;

  • 大多数人将`Use Doctrine \ ORM \ Mapping添加为ORM;然后添加@ORM \ Index(...)` (7认同)