Mysql 删除实体而不删除指向该实体的外键链接
我有一个表产品,实体tva链接到表tva,实体图像链接到表媒体。我呈现在索纳塔管理网站的所有产品。我希望能够从管理部门删除一个产品 我希望能够删除一个产品,而不删除外键链接到它 但我有一个错误: SQLSTATE[23000]:完整性约束冲突:1451无法删除或删除 更新父行:外键约束失败(Mysql 删除实体而不删除指向该实体的外键链接,mysql,sql,symfony,orm,doctrine-orm,Mysql,Sql,Symfony,Orm,Doctrine Orm,我有一个表产品,实体tva链接到表tva,实体图像链接到表媒体。我呈现在索纳塔管理网站的所有产品。我希望能够从管理部门删除一个产品 我希望能够删除一个产品,而不删除外键链接到它 但我有一个错误: SQLSTATE[23000]:完整性约束冲突:1451无法删除或删除 更新父行:外键约束失败(flypost, 约束FK_5A8A6C8D4D79775F外键(tva_id)引用 tva(id) 这是我的实体tva和图像 /** * @ORM\ManyToOne(targetEntity="FLY\
fly
post
,
约束FK_5A8A6C8D4D79775F
外键(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;
我决定将join列从这个
*@ORM\JoinColumn(nullable=true)
更改为这个*@ORM\JoinColumn(onDelete=“CASCADE”)
,它可以工作,我可以删除产品,但它也可以删除外键,我不想这样做,因为我有其他使用相同图像和tva的产品。(onDelete=“CASCADE”)
将在删除父记录时删除子记录。如果不想删除子记录,则需要配置onDelete=“SET NULL”
。这将在子记录中将外键值设置为null
。我找到了解决问题的方法:)我删除了这一行:cascade={“persist”,“remove”}
并将这一行*@ORM\JoinColumn(nullable=true)
更改为*@ORM\JoinColumn(onDelete=“set null”)
非常感谢Darshan Mehta的帮助。:) 我尝试了使用
onDelete=“SET NULL”
,但它将我的所有外键都设置为NULL。我有许多产品使用相同的图像。我不想删除外键或将其设置为null,因为我的所有其他产品也将被设置为null。我只想删除一个产品而不删除或设置为空外键。因为其他产品使用相同的外键。请查看此处的文档:。您只能选择提供的参考选项之一。i、 e您可以尝试将其设置为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;