我正在学习 Symfony 3,想知道创建迁移然后根据数据库迁移中已更改的模式重新生成实体的最佳方法是什么。
目前,我所做的是:安装此捆绑包:
"doctrine/doctrine-migrations-bundle": "^1.0"
Run Code Online (Sandbox Code Playgroud)
doctrine.orm.yml更改了我的文件中的字段
在windows命令行中,我写道:
php bin/console doctrine:migrations:diff
Run Code Online (Sandbox Code Playgroud)
然后
php bin/console doctrine:migrations:migrate
Run Code Online (Sandbox Code Playgroud)
这成功创建了一个迁移,其中包含一个名为“migration-versions”的新表和一个同名的新实体。
我现在的问题是,已更改的实体仍然具有旧数据,我希望新的迁移来更新此特定实体,但我被困住了。
我要手动删除它并在命令行中输入吗?
php bin/console doctrine:generate:entities AppBundle
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助。
首先,迁移仅影响您的数据库。这migrations_versions是Symfony存储信息的内部表,你不需要关心这个表。
迁移的工作流程是这样的:
doctrine:generate:entities AppBundle:EntityName(这将使用新字段创建您的实体)。doctrine:migrations:diff(这将自动检查差异并创建一个会影响您的数据库的迁移)doctrine:migrations:migrate以将更改保存到数据库。您生成的实体与doctrine:generate:entities迁移概念无关(它只是 db 表与 php 对象的映射)。
当您生成实体时,Symfony 会检测新字段(来自 EntityName.orm.yml)并在实体类中附加它们的 setter/getter。Simfony 不会从实体类中删除旧的内容,因为您可以在其中添加自己的逻辑,并且您不希望它在命令运行后被删除。如果您想删除它们,只需手动执行,或者如果您没有在其中添加任何逻辑,您只需删除文件并重新运行即可doctrine:generate:entities。
希望能帮助到你!