我有一個表產品,在這些表中的項目表中引用如cart_item和order_item以及shipping_item等刪除相關/引用的實體
所有這些提法可選的(product_id在這些表中設置爲空)。
我需要有一種方法來刪除產品,並仍然保留其他表的記錄。我能想到的一種方法是進入所有這些表,將product_id設置爲空,然後返回到產品表以刪除。但是,因爲我可能不知道所有引用產品(許多其他包都可以包含引用該產品的實體)的表,有沒有一種方法可以知道所有這些關聯以循環並設置爲null?
(或者也許還有更好的辦法嗎?)
PS:這個想法,這是一個購物車,車主可能需要刪除過期的產品進行清理,但對於訂購,運輸的項目,他們仍然需要保持記錄。
EDIT1:
這是OrderItem的實體產品參考的定義:
/**
* @var \Product
*
* @ORM\ManyToOne(targetEntity="Product")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="product_id", referencedColumnName="id")
* })
*/
private $product;
我得到的錯誤:
PDOException:SQLSTATE [23000 ]:完整性約束違規:1451 無法刪除或更新父行:外鍵約束失敗 (
test
。order_item
,C ONSTRAINTfk_order_item_product1
外鍵 (product_id
)參考文獻product
(id
)ON DELETE NO ACTION ON UPDATE NO ACTION)
EDIT2:
我最初設定的onupdate = 「SET NULL」 來在order_item實體,並認爲這是不夠的,它不是:
/**
* @var \Product
*
* @ORM\ManyToOne(targetEntity="Product")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
* })
*/
private $product;
在那之後,我公頃d以更新數據庫模式。
onDelete =「SET NULL」是去 – Drmjo 2015-02-20 17:55:02