用于将新模型添加到基于Symfony + Doctrine构建的应用程序的标准习惯用法

时间:2009-12-08 11:14:02

标签: php symfony1 doctrine

在维护所有以前的模型及其元数据(如关系)的同时,将新模型添加到我在Symfony + Doctrine上构建的应用程序的标准方法是什么。

我真正想要的是:一个命令/程序,相当于./script/generate model FooModel中的Ruby on Rails(生成时没有任何类型的重置db / reset模型)

如果这两个是不同的东西,我正在追逐错误的鬼(我想我不是),请告诉我。

编辑:更新了问题。

3 个答案:

答案 0 :(得分:3)

您不应该重写基类,因为每当您执行build:alldoctrine:build-model时,这些基本类都会自动生成。使用lib / model目录中生成的类,例如YourModel .class.php如果你想添加新方法等那么你的新模型将与你现有的模型一起生成。

答案 1 :(得分:1)

标准流程是将新模型及其所需的任何关系添加到schema.yml

然后执行./symfony doctrine:build-all(或:build --all for symfony 1.3 / 1.4)

正如richsage所说,你不应该编辑基类,所以这个操作完全没有破坏性。

Doctrine还具有迁移功能,因此您可以在将新代码部署到生产环境时轻松更新数据库模式:

http://www.doctrine-project.org/documentation/cookbook/1_0/en/symfony-and-doctrine-migrations

较新版本的doctrine(1.1 +,symfony 1.3+)包含generate-migrations-diff任务,可以为您创建迁移。这里有很好的介绍:

Extra changeColumns in Doctrine generate-migrations-diff

[编辑:上面问题的作者现在也在下面复制/粘贴]

答案 2 :(得分:0)

generate-migrations-diff不会区分两个不同的yaml文件。它实际上会比较您的模型和您的yaml文件,然后根据差异生成迁移。如果从与yaml和类同步的db开始,那么进行模式更改的工作流应该是:

  1. 更改yaml文件
  2. 运行 generate-migrations-diff ,将您当前(已更改)的yaml与您的(未更改的)模型区分开来。这将在doctrine / migrations目录中生成迁移文件(或者在doctrine配置中设置任何migrations_path)。
  3. 运行迁移以运行在步骤2中创建的迁移并修改数据库
  4. 运行 generate-models-yaml ,根据您的yaml文件生成新类。这些是你指定生成的模型的地方(在你的学说配置中的models_path)。
  5. 运行 generate-sql 以生成SQL文件。这将是你的doctrine sql_path配置设置为的地方。