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


Hello,

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

tincode
Auteur

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;
    }

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
Auteur

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)