Hoe een Entity Manager voor Symfony Migraties Speciferen: Eenvoudige Gids

Symfony

Gepubliceerd: 12.09.2024

Als je werkt met meerdere databases of entity managers in je Symfony-applicatie, moet je mogelijk migraties maken en beheren voor elke specifieke entity manager. Deze gids laat je zien hoe je Symfony-migraties voor verschillende entity managers configureert, genereert en uitvoert, zodat je elke keer de juiste database target.

Wat zijn Symfony Entity Managers?

In Symfony is de Entity Manager onderdeel van Doctrine ORM (Object-Relational Mapper). Het beheert de interacties van je applicatie met de database. In gevallen waar je met meerdere databases moet werken, kun je verschillende entity managers definiëren en gebruiken. Elke manager is verbonden met zijn respectieve database en beheert zijn eigen set van entiteiten.

Deze gids helpt je ervoor te zorgen dat je Doctrine-migraties kunt uitvoeren voor de juiste entity manager in een Symfony-applicatie die gebruik maakt van meerdere entity managers.

Stap-voor-Stap: Configureren van Meerdere Entity Managers

1. Definieer Meerdere Entity Managers in doctrine.yaml

Eerst moet je je meerdere entity managers definiëren in het bestand config/packages/doctrine.yaml. Elke entity manager komt overeen met een databaseverbinding en een set entiteiten.

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                url: '%env(resolve:DATABASE_URL)%'
            another:
                url: '%env(resolve:ANOTHER_DATABASE_URL)%'
    orm:
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                mappings:
                    App:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity/Default'
                        prefix: 'App\Entity\Default'
            another:
                connection: another
                mappings:
                    AnotherApp:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity/Another'
                        prefix: 'App\Entity\Another'
  • default: De standaard entity manager is verbonden met je hoofd-database.
  • another: Een tweede entity manager die verbonden is met een andere database.

2. Database-URL's in .env

Zorg ervoor dat je .env bestand de juiste database-URL's bevat voor de verbindingen:

DATABASE_URL="mysql://gebruiker:wachtwoord@127.0.0.1:3306/default_db"
ANOTHER_DATABASE_URL="mysql://gebruiker:wachtwoord@127.0.0.1:3306/another_db"

Migraties Genereren voor een Specifieke Entity Manager

Nu je meerdere entity managers hebt geconfigureerd, kun je migraties genereren voor elk van hen.

1. Genereer Migratie voor de Standaard Entity Manager

Voor de standaard entity manager, voer het volgende commando uit:

php bin/console make:migration

Dit genereert een migratie voor de entiteiten die worden beheerd door de default entity manager.

2. Genereer Migratie voor de another Entity Manager

Om een migratie te genereren voor een specifieke entity manager, zoals another, gebruik je de --em optie:

php bin/console make:migration --em=another

Dit zorgt ervoor dat de migratie de veranderingen weerspiegelt in de entiteiten die worden beheerd door de another entity manager.

Migraties Uitvoeren voor een Specifieke Entity Manager

Om migraties uit te voeren voor een specifieke entity manager, moet je de --em optie specificeren in het migratiecommando.

1. Voer Migraties uit voor de Standaard Entity Manager

Voor de standaard entity manager, kun je het volgende uitvoeren:

php bin/console doctrine:migrations:migrate

2. Voer Migraties uit voor de another Entity Manager

Voor de another entity manager, gebruik je de --em vlag:

php bin/console doctrine:migrations:migrate --em=another

Dit zorgt ervoor dat migraties worden toegepast op de juiste database die verbonden is met de another entity manager.

Migraties Scheiden per Entity Manager

Als je meerdere entity managers hebt, is het vaak een goed idee om migraties te scheiden per manager. Dit kan worden gedaan door verschillende mappen voor migraties te configureren in doctrine_migrations.yaml.

1. Definieer Aparte Migratiepaden

In config/packages/doctrine_migrations.yaml stel je verschillende migratiepaden in voor elke entity manager:

doctrine_migrations:
    migrations_paths:
        'App\Migrations\Default': '%kernel.project_dir%/migrations/default'
        'App\Migrations\Another': '%kernel.project_dir%/migrations/another'

Deze structuur zorgt ervoor dat de migraties voor elke entity manager in aparte mappen worden opgeslagen, waardoor verwarring en overlap worden voorkomen.

Conclusie

Door deze gids te volgen, kun je eenvoudig Symfony-migraties beheren voor meerdere entity managers. Vergeet niet:

  • Configureer elke entity manager met zijn eigen verbinding en mappings.
  • Genereer en voer migraties uit voor elke entity manager met behulp van de --em vlag.
  • Organiseer migraties in aparte mappen voor duidelijkheid en onderhoud.

Met deze stappen zal je Symfony-applicatie meerdere databases nauwkeurig beheren en zorg je voor soepele migraties, afgestemd op elke entity manager.