Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

denormalizationContext imbrique #2689

Open
mahery01 opened this issue Apr 17, 2024 · 0 comments
Open

denormalizationContext imbrique #2689

mahery01 opened this issue Apr 17, 2024 · 0 comments

Comments

@mahery01
Copy link

Hello everybody,
I have this three following entity

`<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Metadata\ApiResource;
use App\Repository\ProduitRepository;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Serializer\Annotation\Groups;

#[ORM\Entity(repositoryClass: ProduitRepository::class)]
#[ApiResource(
normalizationContext:['groups' => [
'produit:lecture',
]],
denormalizationContext:['groups' => [
'produit:ecriture',
'produit:ecriture:p',
'produit:ecriture:l'
]],
)]
class Produit
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;

#[ORM\Column(length: 255)]
#[Groups(['produit:lecture', 'produit:ecriture'])]
private ?string $nom = null;

#[ORM\Column(length: 255)]
#[Groups(['produit:lecture', 'produit:ecriture'])]
private ?string $prix = null;

#[ORM\OneToMany(targetEntity: ProduitPrix::class, mappedBy: 'produit', orphanRemoval: true, cascade:["persist", "remove"])]
#[Groups(['produit:lecture:p', 'produit:ecriture:p'])]
private Collection $produitPrixes;

#[ORM\OneToMany(targetEntity: CompositionProduit::class, mappedBy: 'produits', cascade:["persist", "remove"])]
#[Groups(['produit:lecture:l', 'produit:ecriture:l'])]
private Collection $compositionProduits;

public function __construct()
{
    $this->produitPrixes = new ArrayCollection();
    $this->compositionProduits = new ArrayCollection();
}

public function getId(): ?int
{
    return $this->id;
}

public function getNom(): ?string
{
    return $this->nom;
}

public function setNom(string $nom): static
{
    $this->nom = $nom;

    return $this;
}

public function getPrix(): ?string
{
    return $this->prix;
}

public function setPrix(string $prix): static
{
    $this->prix = $prix;

    return $this;
}

/**
 * @return Collection<int, ProduitPrix>
 */
public function getProduitPrixes(): Collection
{
    return $this->produitPrixes;
}

public function addProduitPrix(ProduitPrix $produitPrix): static
{
    if (!$this->produitPrixes->contains($produitPrix)) {
        $this->produitPrixes->add($produitPrix);
        $produitPrix->setProduit($this);
    }

    return $this;
}

public function removeProduitPrix(ProduitPrix $produitPrix): static
{
    if ($this->produitPrixes->removeElement($produitPrix)) {
        // set the owning side to null (unless already changed)
        if ($produitPrix->getProduit() === $this) {
            $produitPrix->setProduit(null);
        }
    }

    return $this;
}

/**
 * @return Collection<int, compositionProduit>
 */
public function getCompositionProduits(): Collection
{
    return $this->compositionProduits;
}

public function addCompositionProduits(CompositionProduit $compositionProduit): static
{
    if (!$this->compositionProduits->contains($compositionProduit)) {
        $this->compositionProduits->add($compositionProduit);
        $compositionProduit->setProduits($this);
    }

    return $this;
}

public function removeCompositionProduits(CompositionProduit $compositionProduit): static
{
    if ($this->compositionProduits->removeElement($compositionProduit)) {
        // set the owning side to null (unless already changed)
        if ($compositionProduit->getProduits() === $this) {
            $compositionProduit->setProduits(null);
        }
    }

    return $this;
}

}
<?php

namespace App\Entity;

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Metadata\ApiResource;
use App\Repository\ProduitPrixRepository;
use Symfony\Component\Serializer\Annotation\Groups;

#[ORM\Entity(repositoryClass: ProduitPrixRepository::class)]
#[ApiResource()]
class ProduitPrix
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;

#[ORM\Column]
#[Groups(['produit:lecture:p', 'produit:ecriture:p'])]
private ?int $quantite = null;

#[ORM\Column(type: Types::DECIMAL, precision: 10, scale: 2)]
#[Groups(['produit:lecture:p', 'produit:ecriture:p'])]
private ?string $prix = null;

#[ORM\ManyToOne(inversedBy: 'produitPrixes')]
#[ORM\JoinColumn(nullable: false,  name: 'id_produit', onDelete: 'CASCADE')]
private ?Produit $produit = null;

#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: false)]
#[Groups(['produit:lecture:p', 'produit:ecriture:p'])]
private ?Unite $unite = null;

public function getId(): ?int
{
    return $this->id;
}

public function getQuantite(): ?int
{
    return $this->quantite;
}

public function setQuantite(int $quantite): static
{
    $this->quantite = $quantite;

    return $this;
}

public function getPrix(): ?string
{
    return $this->prix;
}

public function setPrix(string $prix): static
{
    $this->prix = $prix;

    return $this;
}

public function getProduit(): ?Produit
{
    return $this->produit;
}

public function setProduit(?Produit $produit): static
{
    $this->produit = $produit;

    return $this;
}



public function getUnite(): ?Unite
{
    return $this->unite;
}

public function setUnite(?Unite $unite): static
{
    $this->unite = $unite;

    return $this;
}

}
<?php

namespace App\Entity;

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Metadata\ApiResource;
use App\Repository\CompositionProduitRepository;
use Symfony\Component\Serializer\Annotation\Groups;

#[ORM\Entity(repositoryClass: CompositionProduitRepository::class)]
#[ApiResource(
normalizationContext:['groups' => [
'l_produit:lecture'
]],
denormalizationContext:['groups' => [
'l_produit:ecriture'
]],
)]
class CompositionProduit
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;

#[ORM\Column(type: Types::DECIMAL, precision: 10, scale: 0)]
#[Groups(['l_produit:lecture', 'l_produit:ecriture', 'produit:lecture:l', 'produit:ecriture:l'])]
private ?string $quantite = null;

#[ORM\ManyToOne(inversedBy: 'compositionProduits')]
#[ORM\JoinColumn(nullable: false, name:'id_produit')]
private ?Produit $produits = null;

#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: false)]
#[Groups(['produit:lecture:l', 'produit:ecriture:l'])]
private ?produitPrix $produitprix = null;



public function getId(): ?int
{
    return $this->id;
}

public function getQuantite(): ?string
{
    return $this->quantite;
}

public function setQuantite(string $quantite): static
{
    $this->quantite = $quantite;

    return $this;
}

public function getProduits(): ?Produit
{
    return $this->produits;
}

public function setProduits(?Produit $produits): static
{
    $this->produits = $produits;

    return $this;
}

public function getProduitprix(): ?produitPrix
{
    return $this->produitprix;
}

public function setProduitprix(?produitPrix $produitprix): static
{
    $this->produitprix = $produitprix;

    return $this;
}

}
`
I get this following example diagram

{ "nom": "string", "prix": "string", "produitPrixes": [ { "quantite": 0, "prix": "string", "unite": "https://example.com/" } ], "compositionProduits": [ { "quantite": "string", "produitprix": { "quantite": 0, "prix": "string", "unite": "https://example.com/" } } ] }
but instead I would like to get this one
{ "nom": "string", "prix": "string", "produitPrixes": [ { "quantite": 0, "prix": "string", "unite": "https://example.com/" } ], "compositionProduits": [ { "quantite": "string", "produitprix": "https://example.com/" } ] }
what from my codes I must modify to obtain this diagram.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant