Mysql 删除实体而不删除指向该实体的外键链接

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\

我有一个表产品,实体tva链接到表tva,实体图像链接到表媒体。我呈现在索纳塔管理网站的所有产品。我希望能够从管理部门删除一个产品

我希望能够删除一个产品,而不删除外键链接到它

但我有一个错误:

SQLSTATE[23000]:完整性约束冲突:1451无法删除或删除 更新父行:外键约束失败(
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;