2010-09-22 60 views
1

我使用YAML來定義教義架構,並希望啓動auto-increment上設置的id字段的數字不是0,比方說324(這是在mysql中完成的做類似AUTO_INCREMENT=324學說模式更改爲ID自動增量

Google groups thread已經暗示,它可能與command.pre_command event to execute the SQL before fixtures are loaded和引用this page from the symfony documentation做的,但兩者的提示和引用的頁面實際上並不解釋已知的方式做到這一點有誰知道如何實際做到這一點?

+0

YAML不是數據庫格式。 YAML是什麼「自動增量」?它是否被放到實際的數據庫中? – Gareth 2010-09-22 09:17:58

+1

@Jan Fabry,我們從Doctrine切換到Propel,因爲Doctrine有一個bug,使得對數據庫模式的自定義sql定製幾乎不可能。它應該生成sql然後插入它,所以要微調生成的sql,這是在sql生成之後,但在sql插入之前這樣做的好時機。那麼,Doctrine有一個bug(不能調用其他任何東西):在執行sql插入時,它不會執行sql插入,它還會重新訪問prev生成的文件並添加註釋(再次編輯該文件),所以那些編輯覆蓋自定義修改。 Propel不會發生這種情況。 – jblue 2010-09-29 21:50:29

+1

@Jan Fabry Propel不會發生這種情況。 Propel使sql生成完全獨立於sql插入,所以你可以很容易地進入中間,做你自己的事情,你做的改變將會生效。學說說它應該是一樣的,但實際上sql生成和插入步驟並不是真正乾淨地分開。 – jblue 2010-09-29 21:56:59

回答

2

看來Doctrine 1並不支持這種開箱即用的方式,所以人們告訴你要在Symfony CLI任務系統啓動一個新任務(加載燈具)時生成事件。這會起作用,但我不知道這是否可以從YAML值中加載值(也許常規的「表創建任務」會阻塞額外的參數?)。最簡潔的方法是編寫一個執行Doctrine東西的小任務的子類,它理解你傳遞給YAML文件的額外參數。這將首先定期創建數據庫,然後設置自動增量基值。

甚至更​​簡單的方法(實現,也許不會執行)將創建一個單獨的文件與表名和基值,這是由a new Symfony task you write讀取,它創建並執行必要的查詢。在創建數據庫之後但在加載燈具之前,請不要忘記執行此任務。每次添加表格時更新配置文件。

最快捷的方法是使用所有查詢的額外SQL腳本,以及一行可執行所有內容的shell腳本。但是這需要最多的維護。

+0

@jblue:我在Propel源代碼中找不到任何對它的引用,所以我不認爲它具有此功能。阻止它的原因之一可能是跨供應商兼容性(您需要在其他環境中模擬它)。但Propel允許模式中特定於供應商的信息,並且當前[MySQL生成器](http://www.propelorm.org/browser/tags/1.5.4/generator/lib/builder/sql/mysql/MysqlDDLBuilder.php #L106)使用它來訪問額外的功能。所以我認爲如果你創建一張票並寄給開發者列表,獲得對自動增量開始值的支持應該很容易。 – 2010-09-23 08:24:24

+0

閱讀我的意見,我的主要問題。它可以通過在sql生成和sql插入之間自定義sql來完成。我們用Doctrine試了一下,但它有一個bug,所以我們用Propel試了一下,結果很好。我的同事做這個工作決定切換到Propel出於這個原因,因爲我們決定能夠根據需要微調sql對於我們來說非常重要。 – jblue 2010-09-29 22:00:52

0

您可以嘗試在數據庫中手動設置AutoIncrement,然後轉儲Schema文件並查看它在YML中爲您設置的AutoIncrement輸出的內容。

的命令轉儲模式是symfony doctrine::build-schema

這將創建在config /學說目錄中的文件陽明海運。請記住,它會覆蓋當前位於該目錄中的模式文件,因此在嘗試執行此操作之前,您需要備份該模式文件。