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!
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;)
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
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.