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

时间:2011-12-02 00:51:05

标签: doctrine foreign-keys

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

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

class Bar {
...
}

当我尝试删除Bar实体时,我收到此错误:

  

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

如何在不失去删除Bar实体的能力的情况下保持单向关系?

3 个答案:

答案 0 :(得分:8)

使用Doctrine 2,您需要这样做:

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

class Bar {
  ...
}

onDelete =“Cascade”将执行CappY在答案中所说的内容(在删除级联上设置外键)。这样,当您删除Bar实体时,相关的Foo实体也将被删除。

如果你不想删除你的Foo实体,你只需用onDelete =“SET NULL”替换onDelete =“Cascade”。

答案 1 :(得分:4)

您可以使用Orphan Removal。它适用于one-to-oneone-to-manymany-to-many关联。

您只需添加orphanRemoval=true选项,如下所示:

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

希望这可以帮助某人。

答案 2 :(得分:1)

设置外键ON DELETE级联(这也会删除Foo记录)或SET NULL(当你删除Bar时,这会将列设置为NULL)

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html