2013-04-15 29 views
10

Điều này có vẻ đơn giản nhưng tôi không thể làm cho nó đúng:Nhiều-To-One với nhiều đối tượng mục tiêu

Có ba đơn vị: Fruit, VegetableSnack. Snack có các lĩnh vực id, timefood. Thực phẩm là một tham chiếu đến hoặc một quả hoặc một loại rau. Vì vậy, về cơ bản là mối quan hệ nhiều-một-một-một-nhiều như một bữa ăn nhẹ sẽ luôn chỉ giữ một thực phẩm. Nhưng có nhiều hơn một thực thể mục tiêu.

Tôi làm cách nào để ánh xạ điều này trong Doctrine2?

Một giải pháp đơn giản mà tôi đã sử dụng trước khi biết Doctrine2 sẽ sử dụng hai trường: food_typefood_id. Nhưng làm cách nào tôi có thể tạo kết nối từ loại thực phẩm đến đúng thực thể? Tôi nghĩ về một mảng JoinColumns nhưng không thể tìm ra cách để kết nối đúng thực thể. Tôi cũng đã có một cái nhìn tại các lớp siêu ánh xạ vì có một DiscriminatorColumn, nhưng nó cũng có vẻ là cách tiếp cận sai. Nếu tôi hiểu đúng, siêu lớp không thể là một thực thể - vì vậy tôi không thể tạo ra một thực thể thức ăn.

Mọi trợ giúp đều được đánh giá cao. Tôi chắc rằng tôi đang thiếu một cái gì đó đơn giản ở đây.

+1

bạn đã xem [thực hiện việc thực hiện thừa kế bảng đơn của doctrine] (http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance) chưa? –

Trả lời

7

Bạn có thể tạo một lớp (bản đồ) trừu tượng được gọi là Food, có thể chứa một số thông tin cơ bản cho FruitVegetable.

Từ khóa cho câu hỏi của bạn là inheritance mapping, đây là tài liệu hướng dẫn cho nó: http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

Sau đó, bạn có thể tham khảo này ánh xạ lớp cha trong mối quan hệ thực thể của bạn.

+1

Cảm ơn, công trình này! Tôi bị nhầm lẫn bởi câu lệnh trong doc nói: 'Một superclass được ánh xạ không thể là một thực thể'. – sprain

+0

@sprain, bạn có thể chia sẻ ví dụ làm việc không? – Jekis

+0

@Jenechka: Ví dụ trong tài liệu (xem liên kết ở trên, chương 6.1) thực sự là một ví dụ làm việc. – stedekay

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