A new entity was found through the relationship

Par tincode, il y a 5 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.
j'ai 2 entity Recharge et Discount .

Dans l'entity Discount

/** * @ORM\OneToMany(targetEntity=Recharge::class, mappedBy="discount") * */ private $recharges;

Dans l'entity Recharge

/** * @ORM\ManyToOne(targetEntity=Discount::class, inversedBy="recharges") */ private $discount;

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

$recharge->setPaymentStatus('SUCCESS'); $recharge->setSenderPhoneNumber($this->getUser()->getPhone()); $recharge->setPaymentGateway(Constantes::PAYMENT_GATEWAY_STRIPE) ->setTransactionIdUnite($airtime_content->responseId) ->setTransactionStatutUnite("SUCCESS") ->setTransaction($charge->id) ->setTaxid($charge->id) ->setBalanceTransaction($charge->balance_transaction) ->setCarte($charge->source->id) ->setCountryCard($charge->source->country) ->setUser($this->getUser()) ->setDiscount($discount) ->setFinger($charge->balance_transaction); $this->em->persist($recharge); $this->em->flush();

Ce que je veux

L'enregistrement s'effectue correctement quand je mets cascade="persist" mais le problème il me duplique le l'enregistrement du discount dans la base de donnée avec un nouvel id

Ce que j'obtiens

Dans je mets pas cascade="persiste" j'obtiens ça

Doctrine\ORM\ORMInvalidArgumentException {#1062 ▼ #message: "A new entity was found through the relationship 'App\Entity\Recharge#discount' that was not configured to cascade persist operations for entity: App\Entity\Discount@000000006eb580b70000000060cc37b0. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement 'App\Entity\Discount#__toString()' to get a clue. ◀" #code: 0 #file: "C:\wamp\www\banlalsend\vendor\doctrine\orm\lib\Doctrine\ORM\ORMInvalidArgumentException.php" #line: 102 trace: {▶}

Merci d'avance

4 réponses

Elyanor, il y a 5 ans

Hello,

Qu'y a-t'il dans tes getters/setters ?

tincode, il y a 5 ans

Bonjour et merci,

dans mon entity Recharge jai: public function getDiscount(): ?Discount { return $this->discount; } public function setDiscount(?Discount $discount): self { $this->discount = $discount; return $this; } //dans Entity Discount /** * @return Collection|Recharge[] */ public function getRecharges(): Collection { return $this->recharges; } public function addRecharge(Recharge $recharge): self { if (!$this->recharges->contains($recharge)) { $this->recharges[] = $recharge; $recharge->setDiscount($this); } return $this; } public function removeRecharge(Recharge $recharge): self { if ($this->recharges->contains($recharge)) { $this->recharges->removeElement($recharge); // set the owning side to null (unless already changed) if ($recharge->getDiscount() === $this) { $recharge->setDiscount(null); } } return $this; }
Elyanor, il y a 5 ans

D'ac, merci.
À priori c'est dans ton addRecharge, tu fais un $recharge->setDiscount($this);
Maintenant par rapport à ce que tu fais plus haut, à quel moment tu fais ton addRecharge ?

tincode, il y a 5 ans

Non je fais pas de addRecharge.
je fais juste un :

$recharge->setDiscount($discount)

le discount existe en base de donnée l'id = 1 par exemple. mais j'obtiens l'erreur qui me demande d'ajouter cascade=persist, si j'ajoute ce code, l'enregistrement se fera mais avec le meme $discount dont l'id =2 (il duplique en base de donnée)