2011-11-05 12 views
6

का उपयोग कर प्रारंभिक auto_increment मान कैसे सेट करें मैं अपने innoDB (mysql) डेटाबेस उत्पन्न करने के लिए doctrine2 मैपर का उपयोग करता हूं। php एनोटेशन का उपयोग करके मेरे auto_incremented आईडी के प्रारंभिक मान को कैसे सेट करें?doctrine2

इस प्रकार मैंने इस समय अपनी इकाई प्रकार की आईडी का मॉडल किया।

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

मुझे प्रलेखन में निम्न कोड मिला लेकिन ऐसा लगता है कि यह आईडी उत्पन्न करने के लिए एक अलग तालिका का उपयोग करेगा।

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

उत्तर

2

आप रणनीति = "नहीं" सेट कर सकते हैं और @prepersist फ़ंक्शन में अंतिम आईडी सेट कर सकते हैं। अधिक आसान होगा "केवल कुछ आइटम स्वचालित करें = 100;" डेटाफिक्चर या डीबी माइग्रेशन में। यह पोर्टेबल एसक्यूएल नहीं है लेकिन यह आपकी इकाई में जटिलता को जोड़ने के बिना काम करता है।

+1

के लिए विकल्प के रूप में काम करता है ताकि के लिए कैसे आप prepersist समारोह में आईडी सेट होगा? –

+0

उच्चतम +1 prepersist में है, लेकिन यह eventmanager – tvlooy

+0

क्या दौड़ की स्थिति के बारे में के साथ क्या? मुझे लगता है कि आपकी सलाह के बाद यह एक लेनदेन के साथ किया जाना चाहिए, और क्या होगा यदि एक ही समय में कई संस्थाएं बनाई जाती हैं (उदाहरण के लिए इंस्टॉल स्क्रिप्ट में) मुझे लगता है कि आपको समस्याएं मिलेंगी? –

1

नहीं प्रलेखन से वास्तव में स्पष्ट है, लेकिन सूत्रों का कहना है कहते हैं ...

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 @table एनोटेशन

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

[आपने पहले इस प्रश्न का एक ही प्रश्न उसी प्रश्न पर पोस्ट किया था] (https://stackoverflow.com/questions/31867992/doctrine- ऑटो वेतन वृद्धि-शुरू कर-मान-ORM-generatedvalue/45599115 # 45599115)। कृपया कई प्रश्नों के समान उत्तरों को पोस्ट न करें। सबसे अच्छा प्रश्न उठाएं और वहां एक अच्छा उत्तर पोस्ट करें, और उसके बाद दूसरे प्रश्न (ओं) को डुप्लीकेट के रूप में बंद करने के लिए ध्वजांकित करें। यदि प्रश्न डुप्लिकेट नहीं हैं, तो आपको [* अपने प्रश्नों को विशेष रूप से प्रत्येक प्रश्न *] (http://meta.stackexchange.com/q/104227/311792) के अनुरूप बनाना होगा। –

संबंधित मुद्दे