Doctrine2:了解刪除級聯
為了無縫的資料庫維護,通常需要在刪除對應的父記錄時自動刪除子記錄。 Doctrine2 透過「刪除級聯時」支援此功能,此功能可確保子記錄在父記錄被刪除時被刪除。
範例實體
考慮下列實體:
<code class="php">class Child { /** @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) */ private $father; } class Father { /** @ORM\Id @ORM\GeneratedValue */ private $id; }</code>
問題:缺少資料庫級聯
問題:缺少資料庫級聯
雖然程式碼透過「刪除」級聯在Child 和Father 之間建立了關係,但資料庫缺少「刪除時」
解決方案:資料庫級聯<code class="php">/** @ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE") */</code>
這指定當從父表中刪除一行時,子表中所有符合的行將自動刪除。
注意:了解級聯 請務必注意 ORM 級聯和資料庫級聯之間的區別。 ORM 級聯在 Doctrine 的 UnitOfWork 內運行,不會影響資料庫結構,而資料庫級聯會在資料庫中建立物理約束。在目前範例中,cascade={"remove"} 是一個 ORM 層級的級聯,它將觸發 UnitOfWork 中的遞歸刪除,但不會導致所需的資料庫行為。以上是Doctrine2:如何實現刪除級聯以實現無縫資料庫維護?的詳細內容。更多資訊請關注PHP中文網其他相關文章!