Bonjour,
J'ai un souci pour supprimer des enregistrements en base de données.
J'ai 4 entités : Advert, Insurance, InsurancePrice et Duration. Une assurance est liée à une annonce et référence différents prix. Chaque prix est lié à une durée. Voici le schéma :
Pour réaliser ceci, voici le code probant dans chacune des entités :
Dans Advert.php :
Dans Insurance.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 /** * @ORM\OneToOne(targetEntity="App\Entity\Insurance", mappedBy="advert", cascade={"persist", "remove"}) */ private $insurance;
Dans insurancePrice.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 ... /** * @ORM\OneToMany(targetEntity="App\Entity\InsurancePrice", mappedBy="insurance", cascade={"persist", "remove"}) */ private $insurancePrices; public function __construct() { $this->insurancePrices = new ArrayCollection(); } ... /** * @return Collection|InsurancePrice[] */ public function getInsurancePrices(): Collection { return $this->insurancePrices; } public function addInsurancePrice(InsurancePrice $insurancePrice): self { if (!$this->insurancePrices->contains($insurancePrice)) { $this->insurancePrices[] = $insurancePrice; $insurancePrice->setInsurance($this); } return $this; } public function removeInsurancePrice(InsurancePrice $insurancePrice): self { if ($this->insurancePrices->contains($insurancePrice)) { $this->insurancePrices->removeElement($insurancePrice); // set the owning side to null (unless already changed) if ($insurancePrice->getInsurance() === $this) { $insurancePrice->setInsurance(null); } } return $this; } ...
Dans mon controller, après avoir supprimé les prix, je tente d'enregistrer mon annonce :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 /** * @ORM\ManyToOne(targetEntity="App\Entity\Duration") * @ORM\JoinColumn(nullable=false) */ private $duration; /** * @ORM\ManyToOne(targetEntity="App\Entity\Insurance", inversedBy="insurancePrices") * @ORM\JoinColumn(nullable=false) */ private $insurance;
Cependant, au moment du persist(), j'obtiens cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 ... if ($formCosts->isSubmitted() && $formCosts->isValid()) { $insurance->setIncluded($formCosts['insurance']['included']->getData()); $insurance->setDeductible($formCosts['insurance']['deductible']->getData()); $i = 0; $insuranceIncluded = $insurance->getIncluded(); foreach ($insurancePrices as $insurancePrice) { $price = $formCosts['insurancePrices'][$i]['price']->getData(); if ($insuranceIncluded) { $insurance->removeInsurancePrice($insurancePrice); } else { $insurancePrice->setPrice($price); } $i++; } ... $manager->persist($advert); $manager->flush();
Je ne comprends pas d'où provient l'erreur. Quelqu'un aurait une idée?An exception occurred while executing 'UPDATE insurance_price SET insurance_id = ? WHERE id = ?' with params [null, 1]:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`roadtrip`.`insurance_price`, CONSTRAINT `FK_651C18DAD1E63CD1` FOREIGN KEY (`insurance_id`) REFERENCES `insurance` (`id`))
Merci d'avance pour votre aide.
Partager