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.
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.
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'
.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"
Nu je meerdere entity managers hebt geconfigureerd, kun je migraties genereren voor elk van hen.
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.
another
Entity ManagerOm 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.
Om migraties uit te voeren voor een specifieke entity manager, moet je de --em
optie specificeren in het migratiecommando.
Voor de standaard entity manager, kun je het volgende uitvoeren:
php bin/console doctrine:migrations:migrate
another
Entity ManagerVoor 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.
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
.
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.
Door deze gids te volgen, kun je eenvoudig Symfony-migraties beheren voor meerdere entity managers. Vergeet niet:
--em
vlag.Met deze stappen zal je Symfony-applicatie meerdere databases nauwkeurig beheren en zorg je voor soepele migraties, afgestemd op elke entity manager.
Ook interessant
Recente blog posts