Doktrin 2: Verständnis der Löschkaskade
Für eine nahtlose Datenbankpflege ist es häufig erforderlich, untergeordnete Datensätze automatisch zu löschen, wenn der entsprechende übergeordnete Datensatz gelöscht wird . Doctrine2 unterstützt diese Funktionalität durch „On Delete Cascade“, eine Funktion, die sicherstellt, dass untergeordnete Datensätze entfernt werden, wenn ihre übergeordneten Datensätze entfernt werden.
Beispielentitäten
Berücksichtigen Sie die folgenden Entitäten:
<code class="php">class Child { /** @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) */ private $father; } class Father { /** @ORM\Id @ORM\GeneratedValue */ private $id; }</code>
Das Problem: Fehlende Datenbankkaskade
Während der Code eine Beziehung zwischen Kind und Vater mit einer „Entfernen“-Kaskade herstellt, fehlt der Datenbank die „Beim Löschen“-Kaskade Cascade“-Einschränkung.
Lösung: Kaskade auf Datenbankebene
Um „true“ bei „Delete Cascade“ zu implementieren, fügen Sie onDelete="CASCADE" zur Join-Spalte des untergeordneten Elements hinzu:
<code class="php">/** @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE") */</code>
Dies gibt an, dass beim Löschen einer Zeile aus der Vatertabelle alle übereinstimmenden Zeilen in der Untertabelle automatisch gelöscht werden.
Achtung: Kaskaden verstehen
Es ist wichtig, den Unterschied zwischen Kaskaden auf ORM-Ebene und Datenbankebene zu beachten. Kaskaden auf ORM-Ebene arbeiten innerhalb der UnitOfWork von Doctrine und haben keinen Einfluss auf die Datenbankstruktur, während Kaskaden auf Datenbankebene physische Einschränkungen in der Datenbank erzeugen. Im aktuellen Beispiel ist cascade={"remove"} eine Kaskade auf ORM-Ebene, die eine rekursive Löschung in UnitOfWork auslöst, aber nicht zum gewünschten Datenbankverhalten führt.
Das obige ist der detaillierte Inhalt vonLehre 2: Wie kann ich On-Delete-Cascade für eine nahtlose Datenbankwartung implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!