Ok. Versuchte, deinen Originalbeitrag zu bearbeiten, aber er wartet auf Peer-Review. Nicht sicher, wie lange das dauert. Versuche deine Konfiguration zu ändern:
doctrine:
dbal:
default_connection: default
connections:
default:
dbname: old_project
user: root
password: 123123
host: 1.1.1.1
port: 1
# Erstelle eine explizite Verbindung zur Klarheit
old_project:
dbname: old_project
user: root
password: 123123
host: 1.1.1.1
port: 1
electra:
dbname: electra
user: root
password: 123123
host: 2.2.2.2
port: 2
orm:
# Mach mir den Gefallen und füge diese hinzu
auto_generate_proxy_classes: %kernel.debug%
# auto_mapping: true
default_entity_manager: electra
entity_managers:
# Erstelle einen expliziten old_project em, damit default uns nicht verwirrt
old_project:
connection: old_project
mappings:
XXDemoBundle: ~
electra:
connection: electra
mappings:
XXDemoBundle: ~
default:
connection: default
mappings:
XXDemoBundle: ~
Lösche nun komplett deinen Cache, um sicher zu gehen, und führe dann aus:
php bin/console doctrine:mapping:info --em electra
php bin/console doctrine:mapping:info --em old_project
Du solltest identische Ergebnisse erhalten. Ich habe das auf meinem System getestet, daher bin ich ziemlich sicher, dass es bei dir auch funktionieren sollte. Solltest du andere Ergebnisse bekommen, hast du wahrscheinlich irgendwo einen Tippfehler.
Das Mapping-Info funktioniert also. Der nächste Schritt besteht darin zu überprüfen, ob beide Datenbanken zu deinem Entitätsschema passen. Mache also das hier:
php bin/console doctrine:schema:update --em electra --dump-sql
php bin/console doctrine:schema:update --em old_project --dump-sql
Keines sollte eine Ausgabe erzeugen. Wenn doch, bedeutet das, dass deine Datenbank nicht mit deinen Entitäten übereinstimmt und das muss gelöst werden (möglicherweise unter Verwendung der --force Option), bevor Abfragen funktionieren.
Sobald die Datenbanken synchron sind, solltest du wahrscheinlich doctrine:query:dql verwenden und eine Testabfrage gegen beide Manager durchführen. Dann gehe zurück in deinen Code.
\=========================================
Es wurde nun verstanden, dass das eigentliche Ziel darin besteht, dass zwei Entitätsmanager auf dasselbe Set von Entitäten verweisen, jedoch auf irgendeine Weise anzeigen, dass jeder Entitätsmanager sich auf eine bestimmte Gruppe dieser Entitäten beschränken sollte. Und das ist etwas, was Symfony 2 nicht direkt unterstützt.
Du könntest das Doctrine-Handbuch durchgehen und sehen, wie es die Entitätsmetadaten verwaltet, und vielleicht etwas damit machen, aber das könnte kompliziert werden.
Das einzige, was Symfony 2 wirklich bietet, ist die Möglichkeit, einen Entitätsmanager an alle Entitäten in einem oder mehreren Bundles mit dem mapping Attribut zu binden. Wenn du zum Beispiel drei von sieben Entitäten aus einem Bundle mit einem anderen Bundle teilen möchtest, würdest du einfach diese Entitäten im zweiten Bundle neu erstellen. Möglicherweise durch Erweiterung der Klasse, um Code-Duplizierung zu vermeiden.
Ich denke, du möchtest vielleicht deine Herangehensweise etwas ändern. Wenn du einen Satz von Kernentitäten hast, die mit mehreren Bundles geteilt werden, dann lege diese in ihr eigenes Bundle. Jedes Folgebündel kann dann zusätzliche Entitäten hinzufügen.
0 Stimmen
Bitte posten Sie ein einfaches Beispiel dafür, was abstürzt. Zeigen beide Ihrer Verbindungen auf dieselbe Datenbank? Es scheint, als ob Sie auch auto_generate_proxy_classes und vielleicht auto_mapping haben sollten, aber vielleicht auch nicht. Versuchen Sie "php app/console doctrine:mapping:info --em" mit dem ersten und dann dem anderen Entity-Manager.
0 Stimmen
Hallo! Ich verwende zwei verschiedene Datenbanken mit zwei verschiedenen Verbindungen. Die Mapping:info besagt, dass ich keine Entitäten vom Standard-Entitätsmanager behandelt habe, alle meine Entitäten werden von Electra behandelt.
0 Stimmen
Das bedeutet, dass Sie irgendwo ein Konfigurationsproblem haben. Bitte posten Sie Ihre Verbindungszuordnungen. `doctrine:mapping:info` sollte dieselbe Liste von Entitäten für beide EMS zurückgeben. Stellen Sie sicher, dass Sie die `auto_generate`-Zeile haben und dass Sie im Entwicklungsmodus arbeiten.
0 Stimmen
Seien Sie sich bewusst, dass alle Ihre Einheiten für beide Manager verfügbar sind. Da sie auf verschiedene Datenbanken verweisen, wird es keine tatsächliche Überlappung geben, d. h. Sie können nicht über die Datenbanken hinweg verbinden.
0 Stimmen
Ich bin mir nicht sicher, wie man ein Tag ändert, aber du wirst wahrscheinlich mehr Ansichten (und vielleicht Hilfe) erhalten, wenn dies mit doctrine-2 getaggt würde.