2011-02-07 76 views
4

我是Symfony + Doctrine的新手,但对于一般Web应用程序开发(主要是使用Zend Framework)有相当丰富的经验。我已经开始使用Symfony开发一个新项目,我很喜欢它。symfony doctrine:build --all - and-load在数据库中没有丢失记录

我有我的/数据/夹具/文件夹固定装置,其获取加载每当我更新架构的一把做:

sf doctrine:build --all --and-load 

问题是,增加灯具是很乏味的,而我的应用程序界面非常快速加载数据。因此,我将测试数据加载到数据库中(使用我的应用程序),但是随后每当我对模式进行更改(并运行上述语句)时,它都会将数据恢复到夹具中的数据。

在手册中我读到--and-append选项不会覆盖数据库中的数据。但是,--all选项表示重置数据库。

显然,如果我从模式中删除一列,那么我会失去这些信息,但我只想保留我的新记录。

对不起,如果我失去了一些非常明显的东西。预先感谢您提供的任何帮助!

+1

不要忘记,您可以使用sf doctrine:data-dump轻松获取您输入到Fixtures文件中的数据。然后,您可以用它替换现有的灯具,以便在您更新架构时重新加载。无论如何,有一套体面的自动化单元测试设备是很好的... – 2011-02-07 22:13:14

回答

6

使用symfony doctrine:build --all-classes

从文档(symfony help doctrine:build):

You can also generate only class files by using the --all-classes shortcut 
option. When this option is used alone, the database will not be modified. 

    ./symfony doctrine:build --all-classes 
+0

好的,谢谢大家的建议。我想只需要更新模型,然后手动更改数据库结构。我知道学说也会有点难,但我现在有点“满目疮and”,并且认为可能没有什么教义不能做到。 – captainclam 2011-02-08 12:20:35

0

build --all丢弃数据库,并丢失其中的信息。 --and-load将你装置中的任何东西加载回去。所以据我所知,没有一个单一的命令来做你的事情。从我所了解的--and-load--and-append是相似的,因为您也可以反复运行doctrine:data-load并且它不会清除现有数据。因此,简而言之,要保留您的数据,请不要运行build --all,而是通过SQL更改数据库,更新您的模式,然后重新生成模型。

0

如果您正在开发,您可以通过doctrine迁移或通过sql脚本(这是IMO更安全的选项)或手动在数据库中进行数据库更改。通常,我只是重建模型类以反映新的模式更改(通过doctrine:build),只需执行完整的数据库删除并定期重新创建,以确保一切正常。

1

我试图确保我的架构更改流程不够顺畅,我会尽快让他们因为我认为他们是而不是把它们关掉。对我一直在使用的所有数据的处理都是明确的关闭,这会增加精神阻力,并让我使用比我应该更长的问题模式。

所以 - 我想你与你的灯具做是正确的,你只需要重装之前,你的用户界面输入的数据的更多(symfony doctrine:data-dump)转储到灯具。您将不得不重写或重建某些模式更改的固件,但这只是它的方式。投资工作夹具可以让您灵活地进行架构更改。