J'ai l'application Symfony 2.6 et j'utilise doctrine-odm-bundle 3.0.2 (doctrine-odm: 1.1.2, mongodb: 1.4.0). Dans les attributs et lorsque je crée une nouvelle instance de celui-ci, remplissez les champs et persistez - cela se passe bien au début. Je peux créer quelques documents presque vides, avec des documents référencés ou non et ça marche bien. À un certain moment, je suis en train d'ajouter nouvel élément dans la base de données et d'obtenir une erreur:La persistance d'un document arrête brusquement de renvoyer la valeur de l'identificateur suivant (ALNUM strategry)
E11000 duplicate key error collection: test.Product index: _id_ dup key: { : 0 }
Le message est clair - je peux voir qu'il y avait un document ajouté à la collection avec id = 0, donc deuxième ne peut pas aller -> dupliquer l'entrée. Mais pourquoi il commence soudainement à retourner "0" pour id? Même si, j'ai vérifié doctrine_increment_ids
collection - compteur pour id est incrémenté. Mais $product->getId()
devient "0" après persister.
Si je supprime la base de données et recommence à zéro - cela fonctionne, je peux toujours ajouter de nouveaux produits dans la collection. Disons que j'ai créé avec succès 12 produits. Création du 13ème résultat: un document avec id = 0 étant conservé dans la collection. 14ème échoue avec erreur en double.
Pouvez-vous s'il vous plaît aider à dépanner ou suggérer une idée où ça va mal? PS> Je ne considère pas une mise à niveau de Symfony2 (à ce stade) ni comme doctrine-odm-bundle (cela dépend aussi de Symfony2 plus récent) - les efforts de migration sont assez élevés et je ne suis pas sûr que cela corrigera problème. D'abord je veux découvrir la cause première.
// Document Product
/**
* @MongoDB\Document
* @MongoDB\HasLifecycleCallbacks
*/
class Product
{
/** @MongoDB\Id(strategy="ALNUM", type="int") */
protected $id;
/**
* @Gedmo\ReferenceOne(type="entity", class="Entity\User", inversedBy="products", identifier="userId")
*/
protected $user;
/**
* @MongoDB\Field(name="user_id", type="int")
*/
protected $userId;
/**
* @MongoDB\ReferenceMany(
* targetDocument="Picture",
* discriminatorMap={"file" = "File", "picture" = "Picture"},
* discriminatorField="discr",
* defaultDiscriminatorValue="picture"
*)
* @Assert\Valid
*/
protected $pictures;
...
}
// Entity User
/**
* User entity
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var ArrayCollection $textures
*
* @Gedmo\ReferenceMany(type="document", class="Document\Product", mappedBy="user")
*/
protected $products;
...
}
// Document Picture
/**
* @MongoDB\Document
* @MongoDB\InheritanceType("SINGLE_COLLECTION")
* @MongoDB\DiscriminatorField("discr")
* @MongoDB\DiscriminatorMap({"file" = "File", "picture" = "Picture"})
* @MongoDB\DefaultDiscriminatorValue("picture")
* @MongoDB\HasLifecycleCallbacks
*/
class Picture
{
/**
*
* @MongoDB\Id(strategy="ALNUM", type="int")
*/
protected $id;
/**
* @MongoDB\ReferenceOne(targetDocument="Product")
*
* @var Product $product
*/
protected $product;
...
}