簡體   English   中英

學說一對多關系和多對一關系

[英]Doctrine one-to-many relationship AND many-to-one

我有兩張桌子。 我想建立一對多的關系,但也要建立一對多的關系。

頁面可以有一個背景-這是頁面的背景。

頁面也可以具有許多背景-這是用戶上傳背景的集合,將從中為第一關系選擇一個背景。

換句話說,用戶從一堆預定義的背景中選擇一個背景,或者從他上傳的許多背景中選擇一個來進行試用。

編輯:刪除背景時,我希望所有具有該background_id的頁面的background_id設置為null。 刪除頁面時,我希望刪除屬於該頁面的所有自定義背景。

盡管主義和symfony允許進行上述配置,但是在刪除頁面時,Doctrine會完全忽略Backgrounds屬性上的cascade =“ {remove}”,當然,在刪除頁面的自定義背景之前嘗試刪除該頁面時會引發異常。

我究竟做錯了什么?

class Background
{
/**
 * @var string
 *
 * This attribute is for user uploaded backgrounds.
 *
 * @ORM\ManyToOne(targetEntity="Page",inversedBy="customBackgrounds")
 * @ORM\JoinColumn(name="page_id",referencedColumnName="id")
 */
protected $page;

/**
 * @var string
 *
 * This field helps admins to gauge popularity
 *
 * @ORM\OneToMany(targetEntity="Page",mappedBy="background")
 */
protected $pages;
}


class Page
{
/**
 * @var string
 *
 * @ORM\ManyToOne(targetEntity="Background",inversedBy="pages")
 * @ORM\JoinColumn(name="background_id",referencedColumnName="id", nullable=true, onDelete="SET NULL")
 */
protected $background;

/**
 * @ORM\OneToMany(targetEntity="Background", mappedBy="page", cascade={"remove"})
 * @ORM\OrderBy({"id" = "ASC"})
 */
protected $customBackgrounds;
}

嘗試@ORM\\JoinColumn(name="page_id",referencedColumnName="id", onDelete="SET NULL")並進行架構更新。

編輯 :問題出在數據庫級別,而不是教義級別,級聯=“刪除”解決了這一問題,page_id的外鍵仍然存在,onDelete表示如果刪除了具有該外關系的列,請設置字段以“值”此情況下的null。 如果在架構更新前使用--dump-sql,則會看到查詢添加,類似於“ ON DELETE SET *”

在此處可以找到更多信息: http : //www.techonthenet.com/oracle/foreign_keys/foreign_null.php

唯一可以做的就是在實體中使用事件偵聽器,並在刪除頁面時將其背景設置為null或另一個ID。

/**
 * @ORM\OneToMany(targetEntity="Background", mappedBy="page", orphanRemoval=true)
 * @ORM\OrderBy({"id" = "ASC"})
 */
protected $customBackgrounds;

應該做的trick倆( 學說-孤兒撤除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM