7
votes

Comment définir une valeur initiale auto_incrimentation à l'aide de doctrine2

J'utilise la doctrine2 mappeuse pour générer ma base de données InnoDB (MySQL). Comment définir la valeur initiale de mon identifiant Auto_Incrémenté à l'aide des annotations PHP?

Voici comment j'ai modélisé l'ID de mon type d'entité pour le moment. p> xxx pré>

J'ai trouvé le code suivant dans la documentation, mais il semble que cela utilise une table séparée pour générer les ID. P>

/**
 * @Id
 * @GeneratedValue(strategy="SEQUENCE")
 * @Column(type="integer")
 * @SequenceGenerator(sequenceName="tablename_seq", initialValue=1, allocationSize=100)
 */


0 commentaires

3 Réponses :


2
votes

Vous pouvez définir la stratégie = "Aucun" et définir le dernier identifiant dans une fonction @preppersist. Plus facile, il suffirait d'ajouter un "alter table quelque chose de auto_incrènement = 100;" dans une migration de Datafixture ou de DB. Ce n'est pas portable SQL mais il fait le travail sans ajouter de la complexité dans votre entité.


5 commentaires

Comment définiriez-vous l'identifiant dans la fonction répareuse?


Obtenez le plus haut +1 au pré-curseur, mais faites-le avec l'événementManager


Qu'en est-il des conditions de race? Je pense suivre vos conseils que cela doit être fait avec une transaction, et si de nombreuses entités sont créées en une seule go (par exemple dans le script d'installation), je pense que vous n'aurez pas de problèmes.


Eh bien, ma solution préférée serait de faire cela dans une migration de la DB ou un luminaire


J'utilise des luminaires dans mon projet Symfony2. Vous pouvez tout lire ici ici symfony.com/2.0/bundles/doctrinefixturesBundle /index.htm l J'ai également fait un projet Zend-cadre qui a utilisé des migrations de doctrine, vous pouvez en trouver davantage sur cela ici DOCTRINE-PROJECT.ORG/PROJECTS/MIGRAGES/2.0/DOCS/Reference/ ...



1
votes

Pas vraiment clair à partir de la documentation, mais des sources indiquent ... XXX PRE>

Donc, pour que MySQL fonctionne comme option pour @Table Annotation P>

* @ORM\Table(name="xxx", options={"auto_increment": 100})


1 commentaires

Vous avez précédemment posté cette même réponse à une autre question . S'il vous plaît ne postez pas de réponses identiques à plusieurs questions. Choisissez la meilleure question et postez une bonne réponse là-bas, puis signalez-vous pour fermer l'autre question (s) en tant que duplicate. Si les questions ne sont pas duplicates, vous devez adapter vos réponses spécifiquement à chaque question .



1
votes

Voici l'exemple de code complet pour définir l'auto_incrènement dans la doctrine 2 dans MySQL:

$connection = $this->getEntityManager()->getConnection();
$connection->prepare('ALTER TABLE my_table AUTO_INCREMENT = 100;')->execute();


0 commentaires