如何为mysql、mssql和sqlite生成条令迁移



我想使用原则迁移生成数据库迁移脚本。

我的一个客户有mysql数据库,另一个有mssql,我们在开发环境中使用sqlite。

如果我使用php artisan doctrine:migrations:diff生成脚本,那么它将以以下行开始:

$this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on 'mysql'.');

如何根据实体类中的更改生成迁移脚本,使其也可以在mysql、sqlsrv和sqlite上使用?

您可以创建一个dev/doctrine.yml文件,声明三个实体管理器(每个数据库引擎一个(,而不是在dev中只使用sqllite,如文档中所述。当然,您只能在开发文件中进行。不要更改生产配置文件。

然后,创建一个env变量来指定要在dev:中使用的默认orm

# config/packages/dev/doctrine.yaml
doctrine:
orm:
default_entity_manager: '%env(my_current_orm)%'
# ...

在这一步中,您现在只能通过更改环境变量来更改数据库服务器/引擎。

根据这个答案,您可以为每个数据库引擎创建一个doctrine_migration.yaml文件。在这些文件中,您可以指定不同的子目录来存储迁移文件。

#example for mssql engine
doctrine_migrations:
dir_name: '%kernel.project_dir%/migrations/mssql'
# namespace is arbitrary but should be different from AppMigrations
# as migrations classes should NOT be autoloaded
namespace: DoctrineMigrations/MsSql/

在这一步中,您现在可以为每个数据库引擎启动迁移命令。

symfony console doctrine:migrations:status --em=mssql 
--configuration=src/config/packages/dev/migrations/mssql.yml

正如您所看到的,对于迁移,我使用了而不是环境变量。我手动指定默认的orm--em=xxxx,并指定配置文件。我在一个旧项目中使用过这个,但我认为现在可以使用doctrine_migration.yaml文件中的环境变量来优化配置,并且只有一个文件。

edit:(我记得我已经更新了模块加载程序,以避免多次加载迁移配置文件,您可能需要将非sqlite doctrine_migration配置文件移动到另一个目录中,而不是通常的目录(

相关内容

  • 没有找到相关文章

最新更新