web-dev-qa-db-fra.com

Comment puis-je ajouter un INDEX avec Doctrine 2 à une colonne sans en faire une clé primaire?

Je veux ajouter un index à une colonne de table dans ma base de données MySQL. J'utilise Doctrine 2 pour créer mes schémas de base de données.

Je sais que je peux utiliser

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

pour créer des clés primaires. Mais ma colonne n'aura ni le unique ni le primary key attribut. Ce sera simplement un index dans ma table (MySQL connaît ces trois types).

Quelle est la déclaration appropriée pour créer un tel index?

30

Si vous voulez travailler avec doctrine une table doit avoir une clé primaire, voir:

Chaque classe d'entité doit avoir un identifiant/clé primaire. Vous pouvez sélectionner le champ qui sert d’identifiant avec le @Id annotation.
Référence: https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#identifiers-primary-keys

Pour créer un index: 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
{
}

Notez que cela n'est utilisé que si vous générez le schéma à partir de votre code php. Donc, si votre table existe déjà, vous pouvez également ajouter un index vous-même.

55
Flip

Lorsque vous utilisez doctrine et orm:

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

Si vous utilisez Symfony avec doctrine, vous devrez également use la classe Index pour que l'annotation fonctionne correctement use Doctrine\ORM\Mapping\Index;

7
Samir Patel