Kategorien
Allgemein

Symfony – Doctrine, Relationship

Um eine Beziehung zwischen 2 Entities herzustellen verwenden wir OneToMany, ManyToOne, ManyToMany, OneToOne

Beispielsweise wir haben eine App über die wir Bestellungen für ein Restaurant abwickeln. Kunde können aus mehrere Kategorien wählen. Die Beziehung wäre, einer Kategorie sind viele Gerichte zugordnet und

GetränkeVorspeiseHauptgerichtNachspeise
WasserSpargelsuppeSchnitzel mit PommesVanille Pudding
ColaShrimpssuppeKartoffel mit QuarkSchoko Pudding
BierFrühlingsrollenGemüseauflaufHimbeereis
Eistee

targetEntity und mappedBy oder inversedBy

targetEntity beschreibt die Zielentitätät mit der eine Beziehung hergestellt werden soll

inversedBy wird bei der Entity verwendet, die den Fremdschlüssel in der Tabelle enthält. Die Tabelle Gericht enthält somit einen Fremdschlüssel, der unse alle Kategorie IDs anzeigt, dazu wir verbinden uns mit der Eigenschaft/property „gericht“ in der Tabelle Kategorie (inversedBy=“gericht“). Die Entity Kategorie verwendet mappedBy, denn der Fremdschlüssel befindet sich in der Tabelle Gericht.

// ManyToOne, viele Gerichte sind einer Kategorie zugeordnet
class Gericht
{
...
     /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Kategorie", inversedBy="gericht")
     * @Groups({"read", "write"})
     */
    private $kategorie;
// OneToMany, eine Kategorie kann viele Gerichte enthalten
class Kategorie
{
  ...

      /**
     * @ORM\OneToMany(targetEntity="App\Entity\Gericht", mappedBy="kategorie")
     */
    private $gericht;

# um alle getter und setter Klassen zu erstellen können wir folgenden Befehl aufrufen, es wird nach der Entity gefragt

php bin/console make:entity --regenerate