Bei der Löschkaskaden-Implementierung mit Doctrine2
Wenn Sie Doctrine2 zum Verwalten von Datenbankbeziehungen verwenden, müssen Sie möglicherweise untergeordnete Zeilen automatisch löschen Löschen einer übergeordneten Zeile. Dies wird durch die Option „Kaskade bei Löschung“ erreicht.
In Ihrem speziellen Beispiel stoßen Sie nach der Definition der Entitäten „Kind“ und „Vater“ auf ein Problem, bei dem die Option „Kaskade bei Löschung“ nicht erstellt wird in der Datenbank. Dies ist wahrscheinlich auf die Verwendung von Kaskaden auf ORM-Ebene zurückzuführen (angegeben als cascade={"remove"} in der Zuordnung).
Kaskaden auf ORM-Ebene
ORM-Ebene Kaskaden übernehmen den Löschvorgang innerhalb der UnitOfWork und wirken sich auf die Objektstruktur, jedoch nicht auf die Datenbank selbst aus. Beim Entfernen eines Objekts mithilfe von Kaskaden auf ORM-Ebene durchläuft UnitOfWork die zugehörigen Objekte und entfernt diese ebenfalls.
Kaskaden auf Datenbankebene
Im Gegensatz zur ORM-Ebene Kaskaden, Kaskaden auf Datenbankebene erfordern die Angabe von onDelete="CASCADE" in der Join-Spalte der Zuordnung. Dieser Ansatz fügt der Fremdschlüsselspalte in der Datenbank die Einschränkung „bei Löschkaskade“ hinzu und stellt so sicher, dass untergeordnete Zeilen automatisch gelöscht werden, wenn die übergeordnete Zeile entfernt wird.
Um das Problem zu beheben, ändern Sie Ihre untergeordnete Entität wie folgt :
<code class="php">namespace Acme\CascadeBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="child") */ class Child { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) * * @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE") * * @var father */ private $father; }</code>
Das obige ist der detaillierte Inhalt vonWie implementiert man „on delete Cascade' in Doctrine2?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!