Heim  >  Artikel  >  Backend-Entwicklung  >  Wie geht Doctrine2 mit dem Kaskadenverhalten bei ON DELETE CASCADE um?

Wie geht Doctrine2 mit dem Kaskadenverhalten bei ON DELETE CASCADE um?

DDD
DDDOriginal
2024-11-02 08:28:02758Durchsuche

How Does Doctrine2 Handle Cascade Behavior with ON DELETE CASCADE?

Grundlegendes zur Löschkaskade mit Doctrine2

Doctrine2 bietet die Flexibilität, das Kaskadenverhalten bei der Arbeit mit verwandten Entitäten zu konfigurieren. Ein häufiges Missverständnis besteht jedoch darin, dass durch das Setzen von cascade={"remove"} in der Entitätszuordnung automatisch die Option ON DELETE CASCADE zur Fremdschlüsselspalte in der Datenbank hinzugefügt wird.

In Doctrine2 gibt es zwei verschiedene Typen Anzahl der Kaskaden:

1. Kaskade auf ORM-Ebene:

  • Verwendet cascade={"remove"} in der Entitätszuordnung.
  • Eine Berechnung, die von der Unit of Work (UoW) durchgeführt wird.
  • Durchläuft verknüpfte Objekte und entfernt sie, wenn das übergeordnete Objekt entfernt wird.

2. Kaskade auf Datenbankebene:

  • Verwendet onDelete="CASCADE" für die Join-Spalte in der Entitätszuordnung.
  • Erstellt die Option ON DELETE CASCADE für die Fremdschlüsselspalte in die Datenbank.

Das in der Frage bereitgestellte Beispiel verwendet die Kaskade auf ORM-Ebene. Beim Löschen des übergeordneten Objekts werden zwar die zugehörigen untergeordneten Objekte korrekt entfernt, die Option ON DELETE CASCADE wird jedoch nicht in der Datenbank erstellt. Um dies zu erreichen, ist die folgende Änderung erforderlich:

<code class="php">/**
 * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"})
 *
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE")
 * })
 *
 * @var Father
 */
private $father;</code>

Es ist wichtig zu beachten, dass die Verwendung der Kaskade auf ORM-Ebene wie im Beispiel dazu führt, dass das übergeordnete Objekt entfernt wird, wenn ein untergeordnetes Objekt entfernt wird. Dies ist wahrscheinlich nicht das beabsichtigte Verhalten.

Das obige ist der detaillierte Inhalt vonWie geht Doctrine2 mit dem Kaskadenverhalten bei ON DELETE CASCADE um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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