DEV Community

Cover image for Symfony/Doctrine migrations for multiple databases
Rafael Beraldo
Rafael Beraldo

Posted on

5

Symfony/Doctrine migrations for multiple databases

In Symfony/Doctrine, when running the command php bin/console make:migration it generates the migrations for the current driver only, unfortunately it doesn't generate database-agnostic code.

But it can be easily customized. Let's setup it to generate two migrations, one for MySQL (prod/dev) and one for SQLite (test).

Setup

Setup your MySQL in your .env like you would usually do, but set a MIGRATIONS_PATH="migrations/mysql" property to it.

Then create a .env.test and set:

APP_ENV=test
DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
MIGRATIONS_PATH="migrations/sqlite"
Enter fullscreen mode Exit fullscreen mode

In your config/packages/doctrine_migrations.yaml you change default path to get from the env files:

doctrine_migrations:
    migrations_paths:
        'DoctrineMigrations': '%kernel.project_dir%/%env(string:MIGRATIONS_PATH)%'
    enable_profiler: false
Enter fullscreen mode Exit fullscreen mode

Also enable MakerBundle for test env in config/bundles.php:

Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true, 'test' => true],
Enter fullscreen mode Exit fullscreen mode

Running migrations

Now you can work with migrations using:

# for MySQL
php bin/console make:migration
php bin/console doctrine:migration:migrate

# for SQLite
php bin/console make:migration --env=test
php bin/console doctrine:migration:migrate --env=test
Enter fullscreen mode Exit fullscreen mode

Doing this, Symfony will generate migrations for MySQL in migrations/mysql and migrations/sqlite for SQLite.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (1)

Collapse
 
bernard-ng profile image
Bernard Ngandu

Great post, I really need this to speed up test in my CI/CD, thanks a lot

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay