2011-11-05 11 views
6

Uso il mapper doctrine2 per generare il mio database innoDB (mysql). Come impostare il valore iniziale del mio ID autoincrementato usando le annotazioni php?Come impostare un valore auto_increment iniziale utilizzando doctrine2

Ecco come ho modellato l'id del mio tipo di entità al momento.

Ho trovato il seguente codice nella documentazione ma sembra che utilizzerebbe una tabella separata per generare gli ID.

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

risposta

2

È possibile impostare strategy = "NONE" e impostare l'ultimo ID in una funzione @prepersist. Più facile sarebbe semplicemente aggiungere un "ALTER TABLE something AUTO_INCREMENT = 100;" in una migrazione DataFixture o DB. Non è SQL portatile ma fa il lavoro senza aggiungere complessità nel tuo Entity.

+1

come si dovrebbe impostare l'id nella funzione prePersist? –

+0

Ottieni il +1 più alto nel prepersivo, ma fallo con l'eventmanager – tvlooy

+0

e le condizioni di gara? Penso che seguendo il tuo consiglio si debba fare con una transazione, e se molte entità sono create in un colpo solo (ad esempio nello script di installazione) penso che non avrai problemi? –

1

non proprio chiaro dalla documentazione, ma fonti 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']); 

così per mysql lavora come opzione per l'annotazione @Table

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

[In precedenza hai postato la stessa risposta esatta a un'altra domanda] (https://stackoverflow.com/questions/31867992/doctrine- incremento automatico-partenza-valore-orm-generatedvalue/45599115 # 45599115). Si prega di non pubblicare risposte identiche a più domande. Scegli la domanda migliore e posta una buona risposta lì, quindi contrassegna per chiudere le altre domande come duplicati. Se le domande non sono duplicate, devi [* personalizzare le risposte in modo specifico per ciascuna domanda *] (http://meta.stackexchange.com/q/104227/311792). –

Problemi correlati