Ite*_*tor 1 php symfony doctrine-orm doctrine-migrations
我想使用学说迁移生成数据库迁移脚本。
我的一个客户有 mysql 数据库,另一个有 mssql,我们在我们的开发环境中使用 sqlite。
如果我使用 生成脚本php artisan doctrine:migrations:diff,那么它将从这一行开始:
$this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.');
Run Code Online (Sandbox Code Playgroud)
如何从实体类中的更改以某种方式生成迁移脚本,使其也可以在 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)%'
# ...
Run Code Online (Sandbox Code Playgroud)
在这一步,您现在只能通过更改环境变量来更改数据库服务器/引擎。
基于此答案,您可以doctrine_migration.yaml为每个数据库引擎创建一个文件。在这些文件中,您指定不同的子目录来存储您的迁移文件。
#example for mssql engine
doctrine_migrations:
dir_name: '%kernel.project_dir%/migrations/mssql'
# namespace is arbitrary but should be different from App\Migrations
# as migrations classes should NOT be autoloaded
namespace: DoctrineMigrations/MsSql/
Run Code Online (Sandbox Code Playgroud)
在这一步,您现在可以为每个数据库引擎启动迁移命令。
symfony console doctrine:migrations:status --em=mssql \
--configuration=src/config/packages/dev/migrations/mssql.yml
Run Code Online (Sandbox Code Playgroud)
正如你看到的,迁移的,我也不能使用环境变量。我手动指定默认的 orm--em=xxxx并指定配置文件。我在一个旧项目中使用了这个,但我认为现在可以使用doctrine_migration.yaml文件中的环境变量来优化配置并且只有一个文件。
编辑:(我记得我已经更新了模块加载器以避免多次加载迁移配置文件,您可能必须将非 sqlite 原理_迁移配置文件移动到另一个目录中而不是通常的目录中)
| 归档时间: |
|
| 查看次数: |
570 次 |
| 最近记录: |