我有一个表产品实体 tva 是表 Tva 的链接,实体图像是链接到表媒体。我在sonata admin中渲染了网站的所有产品。我希望能够从管理中删除产品。
我希望能够删除产品而不删除指向它的外键链接。
但我有这个错误:
SQLSTATE [23000]:完整性约束违规:1451无法删除或 更新父行:外键约束失败(
fly
。post
, CONSTRAINTFK_5A8A6C8D4D79775F
FOREIGN KEY(tva_id
)参考tva
(id
))
这是我的实体tva和图像
/**
* @ORM\ManyToOne(targetEntity="FLY\BookingsBundle\Entity\Tva", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=true)
*/
private $tva;
/**
* @ORM\ManyToOne(targetEntity="FLY\BookingsBundle\Entity\Media", cascade={"persist","remove"})
* @ORM\JoinColumn(nullable=true)
*/
private $image;
我决定将连接列从此* @ORM\JoinColumn(nullable=true)
更改为此* @ORM\JoinColumn(onDelete="CASCADE")
,它可以删除产品,但它也删除了外键,我不希望这样,因为我有其他使用相同图像和tva的产品。
答案 0 :(得分:4)
(onDelete="CASCADE")
将删除子记录。如果我们不想删除子记录,那么我们需要配置onDelete="SET NULL"
。这会将外键值设置为子记录中的null
。
答案 1 :(得分:0)
我找到了解决问题的方法:)我删除了这一行:cascade={"persist","remove"}
我将此行* @ORM\JoinColumn(nullable=true)
更改为* @ORM\joinColumn(onDelete="SET NULL")
/**
* @ORM\ManyToOne(targetEntity="FLY\BookingsBundle\Entity\Tva")
* @ORM\joinColumn(onDelete="SET NULL")
*/
private $tva;
/**
* @ORM\ManyToOne(targetEntity="FLY\BookingsBundle\Entity\Media")
* @ORM\joinColumn(onDelete="SET NULL")
*/
private $image;
非常感谢@Darshan Mehta的帮助。 :)