2013-04-15 4 views
10

Dies scheint einfach, aber ich kann es nicht richtig machen:Many-To-One mit mehreren Zielinstanzen

Es gibt drei Einheiten: Fruit, Vegetable und Snack. Snack hat die Felder id, time und food. Essen ist eine Referenz auf entweder eine Frucht oder ein Gemüse. Es ist also im Grunde eine Viele-zu-Eins/Eins-zu-Viele-Beziehung, da ein Snack immer nur ein Essen enthält. Aber es gibt mehr als eine Zieleinheit.

Wie würde ich dies in Doctrine2 zuordnen?

Eine einfache Lösung, die ich verwendet hätte, bevor Doctrine2 zwei Felder verwenden würde: food_type und food_id. Aber wie kann ich eine Verbindung von der Essensart zur richtigen Einheit herstellen? Ich dachte über ein Array von JoinColumns nach, aber ich finde keine Möglichkeit, die richtige Entity zu verbinden. Ich habe mir auch die abgebildeten Superklassen angesehen, weil es eine Diskriminator-Spalte gibt, aber es scheint auch der falsche Ansatz zu sein. Wenn ich es richtig verstehe, kann die Oberklasse nicht selbst eine Entität sein - also kann ich keine Nahrungseinheit erschaffen.

Jede Hilfe wird geschätzt. Ich bin mir sicher, dass mir hier etwas Einfaches fehlt.

+1

Haben Sie [Lehre der Implementierung der Vererbung von einzelnen Tabellen] (http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance)? –

Antwort

7

Sie können eine (abstrakte) zugeordnete Oberklasse mit dem Namen Food erstellen, die einige grundlegende Informationen für Fruit und Vegetable enthalten kann.

Das Schlüsselwort für Ihre Frage inheritance mapping ist, das ist die Dokumentation für sie: http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

Dann könnten Sie verweisen diese übergeordnete Klasse in Ihrer Entity-Relationship-abgebildet.

+1

Danke, das funktioniert! Ich wurde durch die Aussage in dem Dokument verwirrt, das sagte: "Eine gemappte Oberklasse kann keine Einheit sein". – sprain

+0

@sprain, könnten Sie das Arbeitsbeispiel teilen? – Jekis

+0

@Jenechka: Das Beispiel in der Dokumentation (siehe Link oben, Kapitel 6.1) ist ein funktionierendes Beispiel. – stedekay

Verwandte Themen