2017-08-09 39 views
1

我在學習Symfony 3,並想知道創建遷移的最佳方式是什麼,然後根據數據庫遷移中已更改的模式重新生成實體。遷移和重新生成Symfony 3實體的最佳方式

此刻,我所做的是: 安裝該軟件包:

"doctrine/doctrine-migrations-bundle": "^1.0" 

改變了場在我doctrine.orm.yml文件

在Windows命令行,我寫道:

php bin/console doctrine:migrations:diff 

Then

php bin/console doctrine:migrations:migrate 

這成功創建了一個名爲「migration-versions」的新表和一個具有相同名稱的新實體的遷移。

我現在的問題是,已更改的實體仍舊有舊數據,我希望新的遷移更新這個特定的實體,在這裏我卡住了。

我應該手動刪除它並鍵入命令行嗎?

php bin/console doctrine:generate:entities AppBundle 

謝謝你的幫忙。

+0

您是否爲表創建了實體? –

+0

據我瞭解,你不想丟失數據。實際上,你必須以這樣的方式改善你的遷移,以便它能夠滿足你的需求,並在緊急情況下保持回滾的方式。如果你描述你有什麼樣的變化,我會盡力幫忙。 – Vladislav

回答

1

首先,遷移隻影響您的數據庫。 migrations_versions是Symfony存儲信息的內部表,您不需要擔心這個表。

遷移的工作流程是這樣的:

  1. 你改變你的映射(在EntityName.orm.yml)
  2. 運行doctrine:generate:entities AppBundle:EntityName(這將創建一個新的領域你的實體)。
  3. 運行doctrine:migrations:diff(這會自動檢查差異,將創建一個遷移會影響您的DB)
  4. 運行doctrine:migrations:migrate堅持更改到DB。

您使用doctrine:generate:entities生成的實體與遷移概念無關(它只是使用php對象的db表映射)。

當您生成實體時,Symfony將檢測新字段(來自EntityName.orm.yml)並在Entity類中爲它們附加setters/getters。 Simfony不會從Entity類中刪除舊的東西,因爲您可以在其中添加自己的邏輯,並且不希望在命令運行後將其刪除。如果您想刪除它們只需手動執行,或者如果您沒有在其中添加任何邏輯,則可以刪除該文件並重新運行doctrine:generate:entities

希望它有幫助!