Ok. Đã cố gắng chỉnh sửa bài đăng gốc của bạn nhưng nó đang chờ xem xét ngang hàng. Không chắc là phải mất bao lâu. Hãy thử thay đổi cấu hình của bạn để:
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: ~
Bây giờ hoàn toàn thổi bay cache của bạn chỉ để đảm bảo sau đó chạy:
php app/console doctrine:mapping:info --em electra
php app/console doctrine:mapping:info --em old_project
Bạn sẽ nhận được kết quả giống hệt nhau. Tôi đã thử nghiệm điều này trên hệ thống của tôi vì vậy tôi khá chắc chắn rằng nếu bạn không thì bạn có một số lỗi đánh máy ở đâu đó.
info Vì vậy, lập bản đồ đang làm việc. Bước tiếp theo là xác minh rằng cả hai cơ sở dữ liệu đều khớp với lược đồ thực thể của bạn. Vì vậy, hãy thực hiện điều này:
php app/console doctrine:schema:update --em electra --dump-sql
php app/console doctrine:schema:update --em old_project --dump-sql
Không được sản xuất bất kỳ đầu ra nào. Nếu có thì nó có nghĩa là cơ sở dữ liệu của bạn không phù hợp với các thực thể của bạn và cần được giải quyết (có thể sử dụng tùy chọn --force) trước khi các truy vấn sẽ hoạt động.
Một khi cơ sở dữ liệu được đồng bộ thì có thể bạn nên sử dụng học thuyết: truy vấn: DQL và làm một truy vấn thử nghiệm chống lại cả nhà quản lý. Sau đó quay lại mã của bạn.
=========================================
Nó bây giờ đã được hiểu rằng mục tiêu thực sự là có hai người quản lý thực thể trỏ đến cùng một tập hợp các thực thể nhưng bằng cách nào đó chỉ ra rằng mỗi người quản lý thực thể nên giới hạn chính nó vào một tập hợp nhất định của các thực thể đó. Và đó không phải là thứ mà S2 hỗ trợ ra khỏi hộp.
Bạn có thể xem xét thông qua hướng dẫn thuyết và xem cách nó xử lý siêu dữ liệu thực thể và có thể làm điều gì đó với điều đó nhưng điều đó có thể trở nên phức tạp.
Điều duy nhất mà S2 thực sự cung cấp là khả năng để ràng buộc một người quản lý tổ chức cho tất cả các thực thể trong một hoặc nhiều gói sử dụng thuộc tính bản đồ. Nếu bạn muốn chia sẻ nói ba trong bảy thực thể từ một gói với một gói khác thì bạn sẽ chỉ cần tạo lại các thực thể đó trong gói thứ hai. Có thể bằng cách mở rộng lớp để tránh trùng lặp mã.
Tôi nghĩ bạn có thể muốn thay đổi cách tiếp cận của bạn một chút. Nếu bạn có một tập hợp các thực thể cốt lõi được chia sẻ với nhiều nhóm thì hãy đặt các đối tượng đó vào nhóm của riêng chúng. Mỗi theo sau trên bó có thể thêm các thực thể bổ sung.
Xin vui lòng gửi một ví dụ đơn giản về những gì đang đâm. Cả hai kết nối của bạn đều trỏ đến cùng một cơ sở dữ liệu? Có vẻ như bạn cũng nên có auto_generate_proxy_classes trong đó và có thể auto_mapping nhưng có thể không. Hãy thử "php app/console doctrine: mapping: info --em" với câu lệnh đầu tiên, sau đó là trình quản lý thực thể khác. – Cerad
Xin chào! Tôi sử dụng hai cơ sở dữ liệu khác nhau với hai kết nối khác nhau. Ánh xạ: thông tin nói rằng tôi không có thực thể nào được quản lý bởi trình quản lý thực thể mặc định, tất cả các thực thể của tôi được xử lý bởi electra. – gabrielthorn
Điều đó có nghĩa là bạn có vấn đề về cấu hình ở đâu đó. Vui lòng đăng ánh xạ kết nối của bạn. doctrine: mapping: info sẽ trả về cùng một danh sách các thực thể cho cả hai ems. Đảm bảo bạn có dòng auto_generate và bạn đang làm việc trong chế độ phát triển. – Cerad