2017-10-02 3 views
0

Je vois que la contrainte UniqueIndex est ignorée dans le document incorporé, voici un exemple:UniqueIndex ne fonctionne pas dans le EmbeddedDocument

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** 
* @MongoDB\EmbeddedDocument() 
*/ 

class Service 
{ 
    /** 
    * @MongoDB\Id() 
    */ 

    protected $id; 

    /** 
    * @MongoDB\Field("type=string") 
    * @MongoDB\UniqueIndex() 
    */ 
    protected $label; 
... 

Lorsque j'insère 2 lignes avec la même étiquette, ils sont acceptés, quand je besoin d'obtenir l'exception de code 11000 concernant l'erreur de clé en double. Des solutions?

Keyswords:

  • Symfony 3.2
  • ODM 1.1.5
  • MongoDB 3.4.4

Répondre

0

Question a déjà répondu: MongoDB: Unique Key in Embedded Document

INDEXE Unique s existent seulement à travers la collection. Pour imposer l'unicité et d'autres contraintes à travers le document, vous devez le faire dans le code client. (Probablement virtual collections permettrait, vous pouvez voter pour.)

+0

J'ai vu this Réponse, je Voudrais savoir juste ya des solutions Se il en PHP, plus claire, En tout cas merci –

+0

Vous pouvez le faire simplement en ajoutant quelques restrictions sur votre méthode AddService (Service $ service), de sorte que vous puissiez appeler tous les services existants (getServices()) et foreach service vérifier que le nom existe déjà ou non, s'il existait, puis lancer une exception. –

+0

Ouais, c'est ce que j'ai déjà fait ... juste la manière standard :), merci !! –