Bonjour,

Je suis bloqué sur une table intermédiaire pour la création d'une API , l'idée etant que j'ai une table Product qui a des suppléments ( ou pas ) qui sont eux meme des Product.
J'ai fait un table intermédiaire SuppProduit car une manyToMany self reference ne me permettais pas d'ajouter une colonne supplémentaire newPrice afin de crée des menus.
Une frite pouvant etre un produit principal par exemple a 4 euros, si je la lie a un hamburger je voudrais gérer un nouveau prix de 3euros par exemple, ou de 2euros si je la lie avec un poulet.
Donc j'ai bien une table du style : id | id_product | id_supp | newPrice

L'idée serait que quand je tape sur l'url du style /product/{id_product} je me retrouve donc avec :
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
{
    "id": 1,
    "name": "Le special",
    "description": "Pain burger, sauce, tartare de légumes, salade fraîche, poulet rôti du Sud-ouest",
    "price": "595",
    "is_supp": false,
    "category": {
        "id": 1,
        "name": "Burger",
        "url_image": "image/burger_test.jpg"
    },
    "supplements": [
        {
        }
     ]
}
Avec la liste de produit lié comme supplément.
Et c'est la ou je galere, pour l'instant je suis arrivé à mettre en base dans ma table SuppProduct mais je n'arrive pas à ressortir les infos correctement, je pense aussi que mon serialisation.yml n'est pas correct et je m'y perds.

Mon controller :

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
44
 /**
     * @Rest\View(statusCode=Response::HTTP_CREATED,serializerGroups={"product"})
     * @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('product_id'));
 
        // 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());
 
//        $product->addSupplement($supp);
 
        if ($form->isValid()){
            $em = $this->getDoctrine()->getManager();
            $em->persist($suppList);
            $em->flush();
 
 
            return $suppList;
        }else{
            return $form;
        }
 
    }
Ainsi que mon fichier serialization.yml :
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
AppBundle\Entity\Category:
   attributes:
      id:
         groups: ['category','product']
      name:
         groups: ['category','product']
      url_image:
         groups: ['category','product']
      products:
         groups: ['category']
 
 
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']
      supplements:
        groups:  ['product','supplement']
 
AppBundle\Entity\SupplementProduct:
   attributes:
      id:
         groups: ['product','supplement']
      products:
         groups: ['product']
      supplements:
         groups: ['product']
      newPrice:
         groups: ['product']
Merci à celui qui pourra m'avancer je bloque completement la dessus et commence un peu à m'embrouiller.

Cordialement,