我有一个表产品,在这些表中的项目表中引用如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