2013-04-15 24 views
10

To wydaje się proste, ale nie mogę zrobić to dobrze:Wiele do jednego z wielu jednostek docelowych

Istnieją trzy podmioty: Fruit, Vegetable i Snack. Snack ma pola id, time i . Żywność jest odniesieniem do albo jeden owoc lub jedno warzywo. Jest to więc relacja wiele do jednego/jeden do wielu, ponieważ jedna przekąska zawsze zawiera tylko jedno jedzenie. Ale istnieje więcej niż jedna jednostka docelowa.

Jak mam to odwzorować w Doctrine2?

Proste rozwiązanie, którego użyłbym wcześniej, aby wiedzieć, że Doctrine2 będzie używać dwóch pól: food_type i food_id. Ale w jaki sposób mogę uzyskać połączenie od typu żywności do właściwej jednostki? Pomyślałem o tablicy JoinColumns, ale nie mogę znaleźć sposobu na połączenie właściwego obiektu. Spojrzałem również na zmapowane klasy nadrzędne, ponieważ istnieje DiscriminatorColumn, ale wydaje się, że jest to niewłaściwe podejście. Jeśli zrobię to dobrze, nadklasa nie może być samym bytem - więc nie mogę utworzyć jednostki żywnościowej.

Każda pomoc jest doceniana. Jestem pewien, że tutaj brakuje mi czegoś prostego.

+1

Czy spojrzałeś na [implementację dziedziczenia pojedynczej tabeli] (http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance)? –

Odpowiedz

7

Można utworzyć (abstrakcyjną) mapowaną superklasę o nazwie Food, która może zawierać podstawowe informacje dla Fruit i Vegetable.

Słowo kluczowe za pytanie jest inheritance mapping, to jest dokumentacja do niego: http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

Następnie można odwołać to odwzorowane superklasę w relacji podmiot.

+1

Dzięki, to działa! Jestem zdezorientowany stwierdzeniem w dokumencie: "Zmapowana nadklasa nie może być bytem". – sprain

+0

@sprain, możesz podzielić się przykładem roboczym? – Jekis

+0

@ Jechechka: Przykład w dokumentacji (patrz link powyżej, rozdział 6.1) faktycznie jest przykładem. – stedekay

Powiązane problemy