2013-03-27 29 views
7

Mục tiêu của tôi là truy cập vào nhiều cơ sở dữ liệu trong một Gói dự án.Symfony2: Cách tạo đối tượng từ nhiều cơ sở dữ liệu hiện có trong SAME Bundle?

tôi đọc qua các tài liệu symfony2 và quản lý để làm các việc sau:

  1. configure multiple connections for different Bundles
  2. generate Entities from ONE Existing Database sử dụng:

    php app/console doctrine:mapping:import AcmeBlogBundle annotation 
    php app/console doctrine:generate:entities AcmeBlogBundle 
    

Nhưng tôi không thể tìm cách đến tạo đối tượng từ nhiều cơ sở dữ liệu hiện có trong SAME Bundle để tôi có thể truy cập nhiều cơ sở dữ liệu trong một gói. Bất kỳ ý tưởng?

P.S. Tôi không quen thuộc với Doctrine. Vì vậy, thực sự nếu có nhiều cách để làm Symfony2 mà không có Doctrine, tôi cũng sẽ đánh giá cao.

CẬP NHẬT # 1:

Cerad's answer đến khá gần. Tuy nhiên, một vấn đề vẫn chưa được giải quyết. Như tôi có một số tên bảng giống nhau trong cơ sở dữ liệu khác nhau, nó tốt hơn để tổ chức chúng thành các thư mục separte bên trong Thư mục Entity. Tôi đã kiểm tra các bài đăng tương tự như thisthat. Nhưng các giải pháp không làm việc cho tôi. Giải pháp của họ đơn giản đặt tất cả các thực thể trực tiếp vào Entity Folder, bỏ qua tùy chọn dir được chỉ định trong config.yml. Có cách giải quyết nào cho vấn đề này không?

Trả lời

4

Bước đầu tiên để định cấu hình nhiều trình quản lý đối tượng (không phải kết nối), một cho mỗi cơ sở dữ liệu. Sau đó bạn sử dụng tùy chọn --em trên các lệnh doctrine để xác định trình quản lý thực thể nào cần sử dụng.

php app/console doctrine:mapping:import "AcmeBlogBundle" annotation --em=name1 
php app/console doctrine:mapping:import "AcmeBlogBundle" annotation --em=name2 

Lưu ý rằng bạn sẽ không thể trực tiếp truy vấn (tham gia) trên nhiều cơ sở dữ liệu với học thuyết. Ít nhất không phải là rất dễ dàng. Miễn là bạn có kế hoạch hạn chế truy vấn của bạn vào một cơ sở dữ liệu tại một thời điểm thì bạn sẽ ổn thôi.

Đây thực sự là một chủ đề nâng cao. Bạn có thể muốn dành chút thời gian với tài liệu học thuyết. Cũng có thể dễ dàng hơn để bắt đầu với một cơ sở dữ liệu và sau đó tách ra sau.

+0

cảm ơn câu trả lời. Vẫn còn một vấn đề chưa được giải quyết. Như tôi có một số tên bảng giống nhau trong cơ sở dữ liệu khác nhau. Vì vậy, nó tốt hơn để tổ chức chúng thành các thư mục separte bên trong Thư mục Entity. Tôi đã kiểm tra http://stackoverflow.com/questions/13765785/doctrine-generate-entities-namespace-issue nhưng có vẻ như nó không thể không được thực hiện đúng? Có cách giải quyết cho vấn đề này – Capitaine

+0

Công việc trực tiếp duy nhất xung quanh là thêm tên cơ sở dữ liệu vào tên bảng. Nhưng làm như vậy có nghĩa là các lệnh học thuyết khác nhau sẽ ngừng hoạt động và nó có nghĩa là các tên cơ sở dữ liệu mã hóa cứng. Tùy thuộc vào nhu cầu của bạn, có thể bạn có thể sử dụng chế độ xem sql để thay đổi về cơ bản tên bảng. Tôi nghĩ bạn sẽ tốt hơn khi chỉ sử dụng nhiều gói. – Cerad

+1

Bạn nên tạo một cài đặt symfony mới, tạo một gói kéo xuống các bảng của bạn và sau đó chỉnh sửa các không gian tên và sao chép các tệp vào trong gói hiện có của bạn. Đó là một nỗi đau, nhưng nó dễ dàng hơn là cố gắng để hack theo cách của bạn xung quanh trong máy phát điện lập bản đồ. Bạn chắc chắn có các không gian tên theo thực thể (tôi có nhiều cấp độ trong các dự án của tôi). 'Bundle/Entity/ThingsThatMakeMeMad/SpilledMilk.php' vv –

Các vấn đề liên quan