關於用Doctrine2 實現刪除級聯
在使用Doctrine2 管理資料庫關係時,可能會遇到需要自動刪除子行的情況刪除父行。這是透過「刪除級聯」選項來實現的。
在您的特定範例中,定義您的子實體和父親實體後,您遇到了未建立「刪除級聯」選項的問題在資料庫中。這可能是由於使用了 ORM 級聯(在關聯中指定為cascade={"remove"})。
ORM 級聯
ORM 級聯處理工作單元內的刪除過程,影響物件結構,但不影響資料庫本身。當使用 ORM 級聯刪除物件時,UnitOfWork 會迭代關聯的物件並刪除它們。
資料庫級聯
與 ORM 級相反級聯,資料庫級聯需要在關聯的連接列上指定 onDelete="CASCADE"。此方法會在資料庫中的外鍵列中新增「刪除級聯」約束,確保刪除父行時自動刪除子行。
要修正此問題,請修改您的子實體,如下所示:
<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>
以上是如何在Doctrine2中實現'onDeleteCascade”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!