Wie zu ManyToMany und OneToMany in Symfony und Doctrine?

7

Ich finde die Dokumentation sehr schlecht, wenn es darum geht, die Schaffung von Beziehungen zwischen Entitäten zu erklären. Also muss ich meine StackExchangers um Hilfe bitten. Also, ich versuche die folgenden Fälle zu erstellen:

Fall 1

A User gehört zu einem oder mehreren Group , und ein Group kann viele Permission haben. A User kann auch Permission haben.

Fall 2

A Ticket hat eine Category , mehrere Tag und mehrere Comment .

Vielen Dank im Voraus!

    
vinnylinux 03.07.2012, 19:38
quelle

2 Antworten

17

Sicher. Das erste, was man verstehen muss, ist, dass es keinen "einen Weg" gibt, dies zu tun. Doctrine gibt eine Menge Flexibilität in Bezug darauf, wie Sie definieren die Beziehung - selbst wenn mehrere Definitionen die exakt gleiche DDL erzeugen (und das ist wichtig zu verstehen - einige der Auswahlmöglichkeiten betreffen nur die Objektseite des ORM, nicht die Modellseite)

Hier ist Ihr Beispiel für Benutzer / Gruppen / Berechtigungen, bei denen es sich eigentlich um viele Viele-zu-Viele-Verknüpfungen handelt (ich habe alle nicht relevanten, aber erforderlichen Code ausgeschlossen, wie PK-Spaltendefinitionen)

%Vor%

Wenn Sie Fragen dazu haben, was hier vor sich geht, lassen Sie es mich wissen.

Nun zu Ihrem zweiten Beispiel

%Vor%

Wie zuvor, lassen Sie mich wissen, wenn Sie das alles erklären möchten.

P.S. Nichts davon wurde tatsächlich getestet, ich habe es einfach in meiner IDE schnell durchgeknallt. Es könnte ein Tippfehler oder zwei sein;)

    
Peter Bailey 03.07.2012, 21:10
quelle
4

Versuchen Sie Folgendes:

%Vor%

Sie haben eine Beziehung zwischen User und Group . Die targetEntity ist der Pfad zu der Entität, mit der Sie eine Beziehung haben möchten, mappedBy ist die Variable aus Group Entität. cascade bedeutet, dass User zu Group hinzufügen und von Group

entfernen kann

Klassengruppe {

%Vor%

Dies ist die Reserveseite der Beziehung. targetEntity sollte den Pfad zurück zur übergeordneten Entität haben, der in diesem Fall User ist. inversedBy ist die Variable aus der User Entität. JoinColumn teilt Doctrine gerade mit, worauf es beitreten soll. Dies wird automatisch durchgeführt, wenn Sie es nicht selbst festlegen.

    
Dave Mascia 03.07.2012 19:48
quelle

Tags und Links