2 votes

Index unique avec doctrine mongodb odm

Je suis en train de créer un système d'inscription pour mon site et je veux éviter les inscriptions en double avec la même adresse e-mail.

La déclaration de la classe utilisateur ressemble à ceci :

/**
 * @Document
 */
class User extends BaseEntity
{
    private 
    /**
     * @Id
     */
    $id,

    /**
     * @String @Index(unique=true)
     */    
    $email
;
}

Mais chaque fois que j'enregistre un utilisateur avec le même e-mail, aucune exception n'est levée et j'obtiens un doublon.

J'ai trouvé quelque part que je dois faire $documentManager->flush(array('safe'=>true)); mais cela ne me semble pas être d'une grande aide.

Comment puis-je obtenir ce dont j'ai besoin ? Merci

5voto

GGGforce Points 308

J'avais un problème similaire. L'index n'est pas créé par Doctrine comme vous pouvez le voir en tapant ce qui suit dans la console mongo :

db.system.indexes.find()

J'ai dû créer mon index directement dans mongo selon ces instructions. Après cela, les doublons ne seront plus créés.

Cependant, Symfony2/Doctrine ne semble pas lancer d'exceptions, l'insertion échoue simplement en silence. Mongodb vous alerte de l'échec de l'insertion si vous le faites directement dans la console.

--éditer : Une exception est lancée lorsque array('safe'=>true) est utilisé comme paramètre pour flush() selon le message original.

0voto

Je suis nouveau sur MongoDB et j'avais un problème similaire lors de la configuration du doctrine mongo db dans mon projet.

J'ai utilisé les outils de base de données de PHPStorm pour vérifier si les index sont créés. Comme vous pouvez le voir dans l'image, aucun index n'est affiché pour la collection UserDevice entrer la description de l'image ici

Mais je pouvais voir les index quand je lance

db.getCollection("UserDevice").getIndexes()

entrer la description de l'image ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X