Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man „on delete Cascade“ in Doctrine2?

Wie implementiert man „on delete Cascade“ in Doctrine2?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-03 00:19:02726Durchsuche

How to Implement

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!

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