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;
}
}
Bonsoir,
Dans votre exemple les attributes ne sont pas au bon endroit, de plus le setter ne pertmet pas le type null