2017-08-09 70 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

希望它有帮助!