web-dev-qa-db-fra.com

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 voudrais

Ce que je veux, c'est faire en sorte que lorsque vous supprimez un enseignant, l'id_teacher est 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?

54
Nicolas Lino

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é!

163
David Barreto