75 votes

Doctrine 2 OneToMany Cascade SET NULL

L'erreur

Impossible de supprimer ou de mettre à jour une ligne parent : une contrainte de clé étrangère échoue.

Les classes

 class Teacher {

    /**
     *@ORM\OneToMany(targetEntity="publication", mappedBy="teacher")
     */
    protected $publications;
}

class Publication {

    /**
     * @ORM\ManyToOne(targetEntity="Teacher", inversedBy="publications")
     * @ORM\JoinColumn(name="teacher_id", referencedColumnName="id")
     */
    protected $teacher;
}

je veux

Ce que je veux, c'est faire en sorte que lorsque vous supprimez un enseignant, l'id_teacher soit modifié en NULL. Je veux garder la publication mais sans référence au professeur.

Je ne sais pas comment faire ça dans Doctrine, est-ce possible ? Ou toujours la relation doit être avec un enseignant ?

208voto

David Barreto Points 3400

Vous devez ajouter l'option onDelete="SET NULL" dans l'annotation de votre entité Publication comme ceci :

 class Publication
{
    /**
    * @ORM\ManyToOne(targetEntity="Teacher", inversedBy="publications")
    * @ORM\JoinColumn(name="teacher_id", referencedColumnName="id", onDelete="SET NULL")
    */
    protected $teacher;
}

À votre santé!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X