0

和有什么区别

symfony doctrine:generate-migrations-db

symfony doctrine:generate-migrations-models

我没有注意到任何区别:我尝试过使用数据库中的表,没有 schema.yml 和没有模型,它们都没有效果。没有生成迁移。

我已经尝试过使用 DB、GENERATED schema.yml 和 NO 模型中的表,它们都没有效果。没有生成迁移。

最后,我尝试使用 DB、GENERATED schema.yml 和 GENERATED 模型中的表,现在它们都生成相同的迁移类:|。

无法真正理解其中的区别。或者至少,考虑到所有场景,开始使用迁移的最佳方式是什么:有模型,但没有数据库,有数据库,但没有模型。

谢谢。

4

1 回答 1

2

给定一个包含 1 个以上表的现有数据库,正在运行

./symfony doctrine:generate-migrations-db

将导致为每个表创建迁移文件。类似地,给定一个目录,比如/lib/model/doctrine充满了预先存在的模型类,运行

./symfony doctrine:generate-migrations-models

将导致为每个模型创建 migraiton 文件。

对于数据库中的表,无论有无 schema.yml 内容,并且没有模型lib/model/doctrine,您只需要确保您的 database.yml 文件具有正确连接到数据库的凭据。

一旦你找出了没有生成迁移文件的问题,我要做的就是开始迁移。

  1. 从您现有的数据库生成一个新的模式./symfony doctrine:build-schema
  2. 手动清理模式文件,并重新建立模型文件中已经存在的关系(如果有的话)。
  3. 重新配置config/databases.yml以指向一个新的空白数据库
  4. 使用./symfony doctrine:generate-migrations-diff. 这将根据您的架构文件创建迁移,以使您的(空白)数据库保持最新
  5. 运行./symfony doctrine:migrate并观察错误。通过修复您的架构文件来修复它们。删除在第 4 步中创建的迁移。刷新您的数据库./symfony doctrine:drop-db && ./symofny doctrine:build-db并返回第 4 步。继续直到您的架构生成一组干净的迁移文件,这些文件可以无错误地运行。
  6. 重建你的模型./symfony doctrine:build --model --forms --filters

现在您有了一个干净的文件,可以使空白数据库保持最新状态的干净迁移,以及与您的文件和数据库schema.yml直接相关的模型。schema.yml

当您想对数据库进行新的更改时,现在就像

  1. 在您的schema.yml
  2. ./symfony doctrine:generate-migrations-diff
  3. 手动查看生成的迁移
  4. 运行./symfony doctrine:migrate以确保迁移运行没有错误
  5. 重建您的模型、表单和过滤器./symfony doctrine:build --model --forms --filters

经历这个过程有时会令人沮丧,但你只需要做一次就可以创建一个非常好的基础。

于 2012-07-25T13:50:06.503 回答