11
votes

Doctrine 2 Relation unidirectionnelle d'une seule à une Supprimer la partie non propriétaire

J'ai deux entités avec une relation unidirectionnelle unique: xxx

lorsque j'essaie de supprimer une sous-barre, je reçois cette erreur:

Violation de la contrainte d'intégrité: 1451 Impossible de supprimer ou de mettre à jour une ligne de parent: une contrainte de clé étrangère échoue

Comment conserver une relation unidirectionnelle sans perdre la capacité de supprimer des entités de barres?


0 commentaires

3 Réponses :


1
votes

Configurez votre clé étrangère sur Suppr Cascade (cela supprimera FOO Records aussi) ou définir NULL (cela définit la colonne sur NULL lorsque vous supprimez la barre)

http: //dev.mysql. COM / DOC / REFMAN / 5.5 / FR / INNODB-CHARGE-KEY-CONTRAINTS.HTML


0 commentaires

9
votes

avec la doctrine 2, c'est ce que vous devez faire:

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

class Bar {
  ...
}


0 commentaires

4
votes

Vous pouvez utiliser le Élimination orpheline . Ça fonctionne avec un-one-one , un-to-plusieurs et nombre-à-plusieurs associations.

Vous avez juste à Ajoutez l'option orphanremoval = true comme suit: xxx

espère que cela pourrait aider quelqu'un.


2 commentaires

Orphanremoval = True ne fonctionne pas lorsque vous essayez de supprimer une entité


Orphanremoval fonctionne si vous parvenez à supprimer la barre, alors foo sera supprimé par la doctrine depuis son orphelin.