2013-11-28 183 views
3

當我使用doctrine:schema:update命令行生成表時,看起來Doctrine(或Symfony?)想要引入重新排列列的命令,將鍵它會出現在前面。我想知道是否有希望在哪裏禁用環境的這個「特性」,所以當我去創建表格時,它們會按照我輸入它們的順序保存。Symfony/Doctrine重新排列數據庫列

我已經四處尋找這個問題,但似乎沒有其他人從我已經能夠提出,並且我不確定什麼捆綁/部分的教條或Symfony我需要改變它不希望重新排列我的表格。任何有關該軟件包的哪一部分將包含該邏輯的信息,或者我可以添加哪些選項來進行修改將不勝感激,因爲目前爲止我無法在文檔中找到任何內容。

更新: 我做了一些調查,我發現一個類似於我的溢出問題,但不是很完美。在我的情況下,我沒有使用新的數據類型,只有向前移動的列是我指定的鍵(主鍵或外鍵)。它引發的命令看起來與此非常相似,只不過它是對我的每一個鍵都執行的。

ALTER TABLE product_price CHANGE price price DECIMAL(10,2) DEFAULT NULL 

Doctrine custom type always altering table

更新2: 下.orm.yml格式下運行MySQL:所要求的其他信息。

想要設置的字段始終是關鍵字段,在將它們更改回我想要/需要它們的順序後,它會覺得需要每次重新排列列。

我不改變任何關於田地;它在初始創建時以及每當我需要運行模式更新時都執行此操作,而不對這些特定字段進行任何更改。

+0

我從來沒有見過堅持重新整理我的專欄的教條。你使用什麼DBMS和版本?是否有可能某些細節在列和屬性映射之間有所不同,例如,如果您更改了精度,可空性或默認值? –

+0

做了doctrine:schema:更新在運行ALTER TABLE語句後停止抱怨,還是一直反覆提示相同的SQL語句。什麼是您的映射配置(註釋或.yml結構)。簡而言之:需要更多信息才能瞭解您的情況。;-) –

+0

在主要問題中增加了更多信息,希望現在已經足夠了,如果不讓我知道還需要什麼,我會添加我所能做的。 – Gyhth

回答

1

我做了一點挖掘,我不認爲你可以在這個任何控制:

https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Schema/Table.php#L555

來看這個,順序是PK,FK,等欄目,在該訂單。 很難掃描原始邏輯的頁面,所以我可能錯過了某些東西,但從我可以告訴它沒有采取任何配置來決定順序。

+0

我不確定這是否是問題,因爲問題源於學說添加一個ALTER TABLE

CHANGE ...,並且我沒有看到類似於此類中的任何行。偶然,我錯過了你鏈接的東西? – Gyhth

+1

你可能想看看平臺特定的類。他們是SQL被編譯的地方。 – Flosculus

+0

我認爲你的答案合併是問題。在我看來,它試圖將我的主鍵作爲我的第一列,將外鍵作爲第二列,然後讓其他列按照他們的意願出現。問題在於dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php中的getAlterTableSQL()函數必須調用您在某個時候提到的getColumns,注意我的表並不按照它想要的順序,然後嘗試根據它想要的那樣重新排列它們以獲得列。 – Gyhth

1

我認爲你應該使用這些方法中的一種生產

  • 運行應用程序/控制檯學說:架構:更新自卸SQL和SQL運行manualy
  • 與DoctrineMigrationBundle使用遷移或類似的東西 Liquibase
+0

我已經完成了其中的一個,但我更關心某種推理/理性,爲什麼我需要這樣做,爲什麼學說希望改變我的數據庫的佈局以開始用。而且,希望還有另一種方法來設置一個選項,讓它不這樣做。儘管如此,我的確欣賞這一點。 – Gyhth