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:
2. Kaskade auf Datenbankebene:
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!