2011-11-05 22 views
6

InoutD2 (mysql) veritabanımı oluşturmak için doctrine2 eşleştiricisini kullanıyorum. auto_incremented kimliğimin php açıklamalarını kullanarak başlangıç ​​değeri nasıl ayarlanır?Doctrine2 kullanarak ilk auto_increment değeri nasıl ayarlanır

Şu anda benim varlık türünün kimliğini nasıl modelledim.

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

Dokümantasyonda aşağıdaki kodu buldum ancak kimlik oluşturmak için ayrı bir tablo kullanıp kullanamayacağı görünüyor.

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

cevap

2

Sen stratejisini = "YOK" olarak ayarlayın ve bir @prepersist fonksiyonunda son kimliğini ayarlayabilirsiniz. "ALTER TABLE bir şey AUTO_INCREMENT = 100;" eklemek daha kolay olurdu. DataFixture veya DB geçişinde. Bu taşınabilir SQL değil, ancak Kurumunuzda karmaşıklık eklemeden iş yapar. belgelerinden çok net

+1

için seçenek olarak çalışır böylece için ... diyor? –

+0

En yüksek + 1'i prepersist'le alın, ancak – tvlooy

+0

etkinlik yöneticisi ile yapın ya yarış koşulları ne olacak? Tavsiyelerinizi takip etmenin bir işlemle yapılması gerektiğini düşünüyorum ve bir seferde birçok varlığın yaratılması durumunda (ör., Yükleme komut dosyasında) sizce sorunları ele alacağınızı düşünüyorum. –

1

değil, fakat kaynaklar

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']); 

MySQL sen prepersist işlevinde id nasıl ayarlayabileceğiniz @ tablo açıklama

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

[Daha önce aynı cevabı bir başka soruya daha önce gönderdiniz] (https://stackoverflow.com/questions/31867992/doctrine- otomatik artış başlayan-değeri-orm-generatedvalue/45599115 # 45599115). Lütfen birden fazla soruya aynı cevapları göndermeyin. En iyi soruyu seçin ve orada iyi bir cevabı yayınlayın ve ardından diğer soruları kopya olarak kapatmak için işaretleyin. Sorular iki kopya değilse, [* cevaplarınızı her soruya özel olarak uyarlamanız gerekir *] (http://meta.stackexchange.com/q/104227/311792). –

İlgili konular