2011-11-05 27 views
6

我使用doctrine2映射器來生成我的innoDB(mysql)數據庫。 如何使用php註釋設置我的auto_incremented id的初始值?如何使用doctrine2設置初始auto_increment值

這就是我現在對我的實體類型的id進行建模的方式。

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

我找到了文檔中的下列代碼,但它看起來好像它會使用一個單獨的表生成的ID。

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

回答

2

您可以設置策略= 「NONE」,並在@PrePersist功能設置的最後一個ID。更簡單的方法是隻添加一個「ALTER TABLE something AUTO_INCREMENT = 100;」在DataFixture或數據庫遷移中。它不是可移植的SQL,但它可以在不增加實體複雜性的情況下完成工作。

+1

你會如何設置id在prepersist功能? –

+0

獲得預賽者中的最高+1,但是與事件管理者一起做 – 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)。 –

相關問題