使用doctrine2和Symfony2迁移多个数据库
我在 symfony2 +doctrine2 中有 2 个数据库 db1 和 db2,这两个数据库在表及其字段方面彼此不同。
我需要从事移民工作。只要有一个数据库,事情就可以正常进行。
但当有多个数据库时,它就不起作用了。
另外,有什么方法可以提供实体管理器特定的迁移设置。
或者有什么方法可以在迁移类中提供连接或实体管理器。
I have 2 databases db1 and db2 in symfony2 + doctrine2 and both databases are different from each other in terms of tables and their fields.
I need to work on migration. Things work fine as long as there is one database.
But it does not works when there are more than one databases.
Also, is there any way where I can provide entity manager specific migration settings.
Or is there any way through which I can provide connection or entity manager in the migration class.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以在迁移任务中使用 --em=name 选项提供entityManager。我还添加了这段代码,以避免错误地在另一个数据库上执行迁移:
我还没有找到任何其他方法来检查 EM,所以如果您的数据库具有相同的名称,我无法帮助您。
另请注意,您应该将skipIf 添加到所有迁移中,以便您可以放心地在两个数据库中进行迁移。
You can provide an entityManager using --em=name option in the migration task. I also add this piece of code, to avoid executing of the migration on another db by mistake:
I haven't found any other way to check the EM, so I can't help you if your databases have same names.
Also note, that you should add the skipIf to all your migrations, so you can migrate without worry in both you databases.
这个问题有点老了,但当我问同样的事情时,它首先出现了。我在 Doctrine 迁移配置中找到了答案文档。假设您有两个数据库的连接,每个数据库都有自己的实体管理器(此处使用 XML 映射,而不是注释,并且不是自动映射,因此架构配置可以位于相同的 config/doctrine 路径中):
那么您就不会在
config.yml
中包含doctrine_migrations
配置。相反,为每个命令创建一个配置文件:然后,每当您运行任何迁移命令时,请指定实体管理器和配置:
如果手动运行,则需要记住一点,因此您可能需要将它们包装在您自己的命令中让生活变得轻松(例如 bin/console my:migrations:status --env=dev --db=special 之类的东西)。如果您有部署 bash 脚本,这也不是问题,例如:
This question is a little old, but it came up first when I was asking the same thing. I found my answer in the Doctrine migrations configuration docs. Let's say you have connections for two databases, each with their own entity managers (mapped here with XML, not annotations, and not auto mapped so the schema configs can live in the same
config/doctrine
path):Then you do not include the
doctrine_migrations
configurations inconfig.yml
. Instead, create a configuration file for each one:Then, whenever you run any migration command, specify both the entity manager and configuration:
It's a bit to remember if running by hand, so you might want to wrap them up in your own command to make life easy (e.g. something like
bin/console my:migrations:status --env=dev --db=special
). It's also not an issue if you have a deploy bash script, like:多年来我一直在使用 @iisisrael 的答案。但升级到 doctrine/migrations 3.x 后,我必须更改配置文件的格式。这就是我现在所拥有的:
然后我将这些放在我的 Makefile 中,这样我就不需要记住魔法咒语:
I've been using @iisisrael's answer for years. But after upgrading to
doctrine/migrations 3.x
I had to change the format of the config files. This is what I have now:And then I have these in my Makefile so that I don't need to remember the magic incantations:
类似的问题和解决方案: Symfony2 - Change Migration Directory
您可以为第二个数据库并将迁移放入其中。
The similar problem and solution: Symfony2 - Change Migration Directory
You can create another migration folder for second DB and put migrations inside.
我知道这是一个古老的威胁,但它是 2023 年最热门的 Google 搜索之一,这就是我在没有自定义实体管理器的情况下使用 Symfony 6.3 为 MySQL 和 SQLite 生成迁移的方法:
在
中设置 MySQL像平常一样创建 .env
,但为其设置一个MIGRATIONS_PATH="migrations/mysql"
属性。然后创建一个
.env.test
并设置:在您的
config/packages/doctrine_migrations.yaml
中,您更改从 env 文件获取的默认路径:同时为测试环境启用 MakerBundle在bundles.php中:
现在你可以使用以下方法生成迁移:
这样做,Symfony将在
migrations/mysql
和migrations/sqlite
中为MySQL生成迁移SQLite。I know this is an old threat but it's one of the top Google searches in 2023, this is how I've done it to generate migrations for both MySQL and SQLite with Symfony 6.3 without custom entity managers:
Setup your MySQL in your
.env
like you would usually do, but set aMIGRATIONS_PATH="migrations/mysql"
property to it.Then create a
.env.test
and set:In your
config/packages/doctrine_migrations.yaml
you change default path to get from the env files:Also enable MakerBundle for test env in bundles.php:
Now you can generate migrations using:
Doing this, Symfony will generate migrations for MySQL in
migrations/mysql
andmigrations/sqlite
for SQLite.