Api serialisation

Symfony

a marqué ce sujet comme résolu.

Bonjour,

Je fais actuellement un API à utiliser par la suite pour un appli de restauration, je galere avec une table intermédiaire pour rentrer les infos correctement.

L’idée est qu’un category a une liste de produit qui ont eux meme ( ou pas ) une liste de supplément ( représentant des produits ) ,

j’ai d’abord crée un manyTomany sur ma table Product pour avoir un table d’association mais j’ai finalement crée une table intermédaire afin de rajouter une colonne NewPrice.

Afin d’avoir une table ayant l’id du produit principal et l’id du produit en supp, puis le nouveau prix :

 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
/**
 * Class SupplementProduct
 * @ORM\Entity()
 * @ORM\Table(name="supplement_product")
 * 
 */
class SupplementProduct
{

    /**
     * @ORM\Id()
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue()
     */
    private $id;


    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Product",inversedBy="products")
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id",nullable=false)
     */
    private $products;


    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Product",inversedBy="supplements")
     * @ORM\JoinColumn(name="supplement_id", referencedColumnName="id",nullable=false)
     */
    private $supplements;


    /**
     * @ORM\Column(type="bigint",nullable=true)
     */
    private $newPrice;

`

De cette façon, les frites prisent en dehors d’un menu par exemple seront 4euros, mais quand je lierai ces frites à un hamburger je pourrai mettre un prix a 3euros, et avec un poulet ces mêmes frites à 2euros.

Maintenant j’ai un peu de mal à entrer ca en base et surtout à les récuperer !

Pour l’instant voici mon controller :

 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
/**
     * @Rest\View(statusCode=Response::HTTP_CREATED,serializerGroups={"supplementproduct"})
     * @Rest\Post("/categories/{categories_id}/products/{product_id}/supplements_product")
     */
    public function postSuppProductionAction(Request $request){


        // On recupere une instance du produit
        $product = $this->getDoctrine()->getRepository(Product::class)
                        ->find($request->get('products'));

        // on recupere une instance du supp ( produit )
        $supp =  $this->getDoctrine()->getRepository(Product::class)
            ->find($request->get('supplements'));

        if (empty($product) || empty($supp)){
            return ProductController::productNotFound();
        }
//        création de l'instance SuppProduct
        $suppList = new SupplementProduct();

        $suppList->setProducts($product)->setSupplements($supp)
            ->setNewPrice($request->get('newPrice'));

        $form = $this->createForm(SupplementProductType::class,$suppList);

        $form->submit($request->request->all());



        if ($form->isValid()){
            $em = $this->getDoctrine()->getManager();
            $em->persist($suppList);
            $em->flush();

            return $suppList;
        }else{
            return $form;
        }


    }

Je voudrais d’abord savoir si la facon de faire vous parait bonne ?

Ensuite, j’ai du mal à voir comment sérializer, j’avais pour le momement mis mon group correspondant au product :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
AppBundle\Entity\Product:
   attributes:
      id:
         groups: ['product','category']
      name:
         groups: ['product','category']
      description:
         groups: ['product','category']
      price:
         groups: ['product','category']
      is_supp:
         groups: ['product','category']
      category:
         groups: ['product']

et en ajoutant en bas une ligne : supplement: groups: [’product’], j’ai tellement fait d’essai que je me suis un peu perdu dans le raisonnement, je pense qu’il faut bien ajouter un attribut supplement mais peut etre aussi faire un groupe supplément ?

Du coup comme ca j’ai bien une réponse de données crées, en base deux id de produit dans ma table mais a chaque retour de requete j’ai en retour un tableau vide .

et mon $product->getSupplement est lui aussi toujours vide..

J’espere avoir été assez clair sinon n’hésitez pas à me demander plus d’info, un grand merci à celui qui pourra m’aider car cette table intermédiare me met la misère :)

A +

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte