2011-11-05 23 views
6

Utilizo el asignador doctrine2 para generar mi base de datos innoDB (mysql). ¿Cómo establecer el valor inicial de mi ID autoincrementado usando las anotaciones php?Cómo establecer un valor auto_increment inicial utilizando doctrine2

Así modelé la identificación de mi tipo de entidad en este momento.

/** 
* @var integer $_id 
* 
* @Column(name="id", type="integer", nullable=false) 
* @Id 
* @GeneratedValue(strategy="IDENTITY") 
*/ 
private $_id; 

Encontré el siguiente código en la documentación pero parece que usaría una tabla separada para generar los identificadores.

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

Respuesta

2

Puede establecer strategy = "NONE" y establecer la última ID en una función @prepersist. Más fácil sería simplemente agregar un "ALTER TABLE something AUTO_INCREMENT = 100;" en una migración de DataFixture o DB. No es SQL portátil, pero hace el trabajo sin agregar complejidad en su Entidad.

+1

¿cómo configurar el id en la función PrePersist? –

+0

Obtenga el +1 más alto en el prepersist, pero hágalo con el eventmanager – tvlooy

+0

¿qué ocurre con las condiciones de carrera? Creo que siguiendo su consejo, debe hacerse con una transacción, y ¿qué ocurre si se crean muchas entidades de una vez (por ejemplo, en el script de instalación)? Creo que obtendrás problemas, ¿no? –

1

no muy clara de la documentación, pero fuentes dice ...

doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php:  if (isset($options['auto_increment'])) { 
doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php:   $tableOptions[] = sprintf('AUTO_INCREMENT = %s', $options['auto_increment']); 

así que para MySQL trabaja como opción para la anotación @table

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

[Anteriormente publicaste esta misma respuesta a otra pregunta] (https://stackoverflow.com/questions/31867992/doctrine- auto-increment-starting-value-orm-generatedvalue/45599115 # 45599115). Por favor, no publique respuestas idénticas a múltiples preguntas. Elija la mejor pregunta y publique una buena respuesta allí, y luego marque para cerrar la (s) otra (s) pregunta (s) como duplicadas. Si las preguntas no son duplicadas, debe [* adaptar sus respuestas específicamente a cada pregunta *] (http://meta.stackexchange.com/q/104227/311792). –

Cuestiones relacionadas