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


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