给定一个包含 1 个以上表的现有数据库,正在运行
./symfony doctrine:generate-migrations-db
将导致为每个表创建迁移文件。类似地,给定一个目录,比如/lib/model/doctrine
充满了预先存在的模型类,运行
./symfony doctrine:generate-migrations-models
将导致为每个模型创建 migraiton 文件。
对于数据库中的表,无论有无 schema.yml 内容,并且没有模型lib/model/doctrine
,您只需要确保您的 database.yml 文件具有正确连接到数据库的凭据。
一旦你找出了没有生成迁移文件的问题,我要做的就是开始迁移。
- 从您现有的数据库生成一个新的模式
./symfony doctrine:build-schema
- 手动清理模式文件,并重新建立模型文件中已经存在的关系(如果有的话)。
- 重新配置
config/databases.yml
以指向一个新的空白数据库
- 使用
./symfony doctrine:generate-migrations-diff
. 这将根据您的架构文件创建迁移,以使您的(空白)数据库保持最新
- 运行
./symfony doctrine:migrate
并观察错误。通过修复您的架构文件来修复它们。删除在第 4 步中创建的迁移。刷新您的数据库./symfony doctrine:drop-db && ./symofny doctrine:build-db
并返回第 4 步。继续直到您的架构生成一组干净的迁移文件,这些文件可以无错误地运行。
- 重建你的模型
./symfony doctrine:build --model --forms --filters
现在您有了一个干净的文件,可以使空白数据库保持最新状态的干净迁移,以及与您的文件和数据库schema.yml
直接相关的模型。schema.yml
当您想对数据库进行新的更改时,现在就像
- 在您的
schema.yml
- 跑
./symfony doctrine:generate-migrations-diff
- 手动查看生成的迁移
- 运行
./symfony doctrine:migrate
以确保迁移运行没有错误
- 重建您的模型、表单和过滤器
./symfony doctrine:build --model --forms --filters
经历这个过程有时会令人沮丧,但你只需要做一次就可以创建一个非常好的基础。