onDelete:"SET NULL" ne fonctionne pas

Par Jean Sérien, il y a 2 ans


Bonjour à tous,

Voulant implémenter une mise à Null du champ "Domaine activité" pour chaque contact lorsque l'on efface un des domaines d'activité existant j'ai donc rajouté onDelete:'SET NULL' sur mon entité "DomainesActivite.php" mais j'obtiens un magnifique "An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (clickandgo.contacts, CONSTRAINT FK_33401573619BC7CB FOREIGN KEY (domaine_activite_id) REFERENCES domaines_activite (id))"...

Ne peut on pas utiliser le onDelete sur une oneToMany (si je fais un schema update --force il me dit que je suis à jour...)?

Merci d'avance pour vos réponses.

DomainesActivite.php

<?php namespace App\Entity; use App\Repository\DomainesActiviteRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; #[ORM\Entity(repositoryClass: DomainesActiviteRepository::class)] #[UniqueEntity('nom_domaine_activite',"Il existe déjà un domaine d'activité avec ce nom dans la base, veuillez en choisir un autre.")] class DomainesActivite { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(length: 150)] private ?string $nom_domaine_activite = null; #[ORM\OneToMany(mappedBy: 'domaine_activite', targetEntity: Contacts::class)] #[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')] private Collection $contacts; public function __construct() { $this->contacts = new ArrayCollection(); } public function getId(): ?int { return $this->id; } public function getNomDomaineActivite(): ?string { return $this->nom_domaine_activite; } public function setNomDomaineActivite(string $nom_domaine_activite): static { $this->nom_domaine_activite = $nom_domaine_activite; return $this; } /** * @return Collection<int, Contacts> */ public function getContacts(): Collection { return $this->contacts; } public function addContact(Contacts $contact): static { if (!$this->contacts->contains($contact)) { $this->contacts->add($contact); $contact->setDomaineActivite($this); } return $this; } public function removeContact(Contacts $contact): static { if ($this->contacts->removeElement($contact)) { // set the owning side to null (unless already changed) if ($contact->getDomaineActivite() === $this) { $contact->setDomaineActivite(null); } } return $this; } }

1 réponse

olive140, il y a 2 ans

Bonsoir,
Dans votre exemple les attributes ne sont pas au bon endroit, de plus le setter ne pertmet pas le type null