OK. Próbowałem edytować pierwotny wpis, ale czeka on na sprawdzenie. Nie wiesz, jak długo to potrwa. Spróbuj zmienić config:
doctrine:
dbal:
default_connection: default
connections:
default:
dbname: old_project
user: root
password: 123123
host: 1.1.1.1
port: 1
# Make an explicit connection just for clarity
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:
# Humor me and add these
auto_generate_proxy_classes: %kernel.debug%
# auto_mapping: true
default_entity_manager: electra
entity_managers:
# Make an explicit old_project em so default does not confuse us
old_project:
connection: old_project
mappings:
XXDemoBundle: ~
electra:
connection: electra
mappings:
XXDemoBundle: ~
default:
connection: default
mappings:
XXDemoBundle: ~
Teraz całkowicie zdmuchnąć pamięć podręczną po prostu mieć pewność, następnie uruchom:
php app/console doctrine:mapping:info --em electra
php app/console doctrine:mapping:info --em old_project
Powinieneś dostać identyczne wyniki. Przetestowałem to na moim systemie, więc jestem całkiem pewien, że jeśli nie, to masz gdzieś literówkę.
Informacje o odwzorowaniu działają. Następnym krokiem jest sprawdzenie, czy obie bazy danych są zgodne ze schematem jednostki. Zrób to:
php app/console doctrine:schema:update --em electra --dump-sql
php app/console doctrine:schema:update --em old_project --dump-sql
Żadne z nich nie powinno wytwarzać żadnych wyników. Jeśli tak się stanie, oznacza to, że twoja baza danych nie pasuje do twoich jednostek i musi zostać rozwiązana (prawdopodobnie za pomocą opcji --force), zanim zapytania będą działać.
Gdy bazy danych są zsynchronizowane, powinieneś prawdopodobnie użyć doctrine: query: dql i wykonać zapytanie testowe dla obu menedżerów. Następnie wróć do swojego kodu.
=========================================
It zrozumiałe jest, że prawdziwym celem jest, aby dwaj menedżerowie podmiotów wskazywali na ten sam zestaw podmiotów, ale w jakiś sposób wskazują, że każdy podmiot zarządzający powinien ograniczyć się do określonego zbioru tych podmiotów. A to nie jest coś, co S2 obsługuje po wyjęciu z pudełka.
Można zajrzeć do podręcznika Doktryny i zobaczyć, jak radzi sobie z metadanymi podmiotu i może zrobić coś z tym, ale to może się skomplikować.
Jedyną rzeczą, którą S2 naprawdę oferuje, jest możliwość powiązania menedżera encji ze wszystkimi jednostkami w jednym lub wielu pakietach za pomocą atrybutu odwzorowania. Jeśli chcesz podzielić się powiedzą trzema z siedmiu elementów z jednego pakietu z innym pakietem, po prostu odtworzysz te elementy w drugim pakiecie. Prawdopodobnie poprzez rozszerzenie klasy, aby uniknąć powielania kodu.
Myślę, że możesz nieco zmienić swoje podejście. Jeśli masz zestaw podstawowych elementów współużytkowanych z wieloma pakietami, umieść je w ich własnym pakiecie. Każdy następny pakiet może następnie dodać dodatkowe elementy.
proszę pisać prosty przykład tego, co jest upaść. Oba połączenia wskazują na tę samą bazę danych? Wygląda na to, że powinieneś mieć również auto_generate_proxy_classes i może auto_mapping, ale może nie. Wypróbuj "php app/console doctrine: mapping: info --em" z pierwszym, a następnie innym menedżerem encji. – Cerad
Cześć! Używam dwóch różnych baz danych z dwoma różnymi połączeniami. Mapowanie: informacje mówią, że nie mam żadnych podmiotów obsługiwanych przez domyślnego menedżera jednostek, wszystkie moje jednostki są obsługiwane przez elektrę. – gabrielthorn
To oznacza, że masz gdzieś problem z konfiguracją. Opublikuj swoje mapowania połączeń. doktryna: mapowanie: informacje powinny zwracać tę samą listę elementów dla obu ems. Upewnij się, że masz linię auto_generate i że pracujesz w trybie programowania. – Cerad