2011-12-02 24 views
5

no poseer Tengo dos entidades con una relación unidireccional uno-a-uno:Doctrina 2 One-To-One relación unidireccional borrar lado

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

class Bar { 
... 
} 

Cuando intento eliminar una entidad bar consigo este error :

Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails

¿Cómo mantengo una relación unidireccional sin perder la capacidad de eliminar entidades Bar?

Respuesta

5

con la doctrina 2, esto es lo que tiene que hacer:

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

class Bar { 
    ... 
} 

El onDelete = "cascada" hará lo que dijo Cappy en su respuesta (la configuración de la clave externa de supresión en cascada). De esta forma, cuando borres tu entidad de Barra, también se eliminará la entidad de Foo asociada.

En caso de que prefiera no eliminar su entidad Foo, simplemente puede reemplazar onDelete = "Cascade" con onDelete = "SET NULL".

2

Puede usar el Orphan Removal. Funciona con one-to-one, one-to-many y many-to-many asociaciones.

que acaba de añadir la opción orphanRemoval=true así:

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

la esperanza que esto podría ayudar a alguien.

Cuestiones relacionadas