Doctrine 原则2一对一单向关系删除非拥有方

Doctrine 原则2一对一单向关系删除非拥有方,doctrine,foreign-keys,Doctrine,Foreign Keys,我有两个具有一对一单向关系的实体: class Foo { ... /** * @OneToOne(targetEntity="Bar") */ private $bar; ... } class Bar { ... } 尝试删除条形图图元时,出现以下错误: 完整性约束冲突:1451无法删除或更新父行:外键约束失败 如何保持单向关系而不丢失删除条形图实体的功能?在删除级联上设置外键(这也会删除Foo记录)或设置NULL(当您删除条形图时,这会将列设置为NULL) 对于条令2,您需要做的

我有两个具有一对一单向关系的实体:

class Foo {
 ...
/**
 * @OneToOne(targetEntity="Bar")
 */
private $bar;
...
}

class Bar {
...
}
尝试删除条形图图元时,出现以下错误:

完整性约束冲突:1451无法删除或更新父行:外键约束失败


如何保持单向关系而不丢失删除条形图实体的功能?

在删除级联上设置外键(这也会删除Foo记录)或设置NULL(当您删除条形图时,这会将列设置为NULL)


对于条令2,您需要做的是:

class Foo {
   ...
  /**
   * @OneToOne(targetEntity="Bar")
   * @JoinColumn(name="bar_id", referencedColumnName="id", onDelete="CASCADE")
   */
  private $bar;
  ...
}

class Bar {
  ...
}
onDelete=“Cascade”将按照CappY在回答中所说的操作(将外键设置为delete Cascade)。这样,当您删除Bar实体时,关联的Foo实体也将被删除

如果您不希望删除您的Foo实体,只需将onDelete=“Cascade”替换为onDelete=“SET NULL”。

您可以使用。它与
一对一
一对多
多对多
关联一起工作

您只需添加如下选项:

@OneToOne(targetEntity="Bar", orphanRemoval=true)

希望这能对其他人有所帮助。

orphanRemoving=true在您尝试删除实体时不起作用orphanRemoving有效如果您成功删除了Bar,那么Foo将被删除,因为它是孤立的