2013-04-15 6 views
10

Questo sembra semplice, ma non riesco a farlo bene:Molti-a-uno con più entità di destinazione

ci sono tre entità: Fruit, Vegetable e Snack. Snack ha i campi id, time e food. Il cibo è un riferimento a o un frutto o un ortaggio. Quindi è fondamentalmente una relazione molti-a-uno/uno-a-molti in quanto uno spuntino avrà sempre un solo cibo. Ma c'è più di una entità bersaglio.

Come mapparlo in Doctrine2?

Una soluzione semplice che avrei usato prima di conoscere Doctrine2 sarebbe utilizzare due campi: food_type e food_id. Ma come posso stabilire una connessione dal tipo di cibo all'entità corretta? Ho pensato a un array di JoinColumns ma non riesco a trovare un modo per connettere l'entità corretta. Ho anche dato un'occhiata alle superclassi mappate perché c'è un DiscriminatorColumn, ma sembra anche essere l'approccio sbagliato. Se ho capito bene, la superclasse non può essere un'entità in sé, quindi non posso creare un'entità alimentare.

Qualsiasi aiuto è apprezzato. Sono sicuro che mi manca qualcosa di semplice qui.

+1

hai guardato [implementazione di doctrine dell'ereditarietà di una tabella singola] (http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance)? –

risposta

7

È possibile creare una superclasse mappata (astratta) denominata Food, che può contenere alcune informazioni di base per Fruit e Vegetable.

La parola chiave per la tua domanda è inheritance mapping, questa è la documentazione per esso: http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

allora si potrebbe fare riferimento a questo mappato superclasse nel vostro rapporto entità.

+1

Grazie, funziona! Mi sono confuso dalla dichiarazione nel doc dicendo: "Una superclasse mappata non può essere un'entità". – sprain

+0

@sprain, potresti condividere l'esempio di lavoro? – Jekis

+0

@Jenechka: l'esempio nella documentazione (vedi link sopra, capitolo 6.1) è in realtà un esempio funzionante. – stedekay

Problemi correlati