Heim > Backend-Entwicklung > PHP-Tutorial > Lehre 2: Wie kann ich On-Delete-Cascade für eine nahtlose Datenbankwartung implementieren?

Lehre 2: Wie kann ich On-Delete-Cascade für eine nahtlose Datenbankwartung implementieren?

Mary-Kate Olsen
Freigeben: 2024-11-03 18:16:03
Original
831 Leute haben es durchsucht

Doctrine2: How Do I Implement On Delete Cascade for seamless database maintenance?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage