Bonjour,

Je cherche à lister tout mes produits ainsi que leurs suppléments ( qui sont eux même des produits ) , j'ai donc deux tables : Product et SuppProduct qui ressemble à ca :

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
45
46
47
class Product
{
    /**
     * @ORM\Id()
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue()
     */
    private $id;
 
    /**
     * @ORM\Column(type="string")
     */
    private $name;
 
    /**
     * @ORM\Column(type="string",nullable=true)
     */
    private $description;
 
 
    /**
     * @ORM\Column(type="bigint")
     */
    private $price;
 
    /**
     * @ORM\Column(type="boolean")
     */
    private $isSupp;
 
 
    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category",inversedBy="products")
     */
    private $category;
 
 
    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\SupplementProduct",mappedBy="products")
     */
    private $products;
 
 
    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\SupplementProduct",mappedBy="supplements",fetch="EAGER")
     */
    private $supplements;
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
 
class SupplementProduct{
/**
     * @ORM\Id() @ORM\ManyToOne(targetEntity="AppBundle\Entity\Product",inversedBy="products")
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id",nullable=false,unique=true)
     */
    private $products;
 
    /**
     * @ORM\Id() @ORM\ManyToOne(targetEntity="AppBundle\Entity\Product",inversedBy="supplements")
     * @ORM\JoinColumn(name="supplement_id", referencedColumnName="id",nullable=false,unique=true)
     */
    private $supplements;
 
 
    private $product_id;
 
    private $supplement_id;
 
 
    /**
     * @ORM\Column(type="bigint",nullable=true)
     */
    private $newPrice;
}
Donc en BDD , je me retrouve avec une table SUppProduit : id_product,id_supp,newPrice . OK

Donc dans mon controller je fais :
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
 public function getAllDataAction(Request $request){
 
//      récupere toutes les categories
        $categories = $this->getDoctrine()
            ->getRepository(Category::class)
            ->findAll();
 
 
//      récuperer une category dans la liste
        foreach ($categories as $category){
//            récuperer la liste de produits dans la category
            $products = $category->getProducts();
//            récuperer un produit dans la list de produits
            foreach ($products as $product){
//                récuperer la list de supplément associé
                $listSupp = $this->getDoctrine()->getRepository(SupplementProduct::class)
                    ->findBy([
                        "products" =>$product,
 
                    ]);
                foreach ( $listSupp as $supp){
                    if ($listSupp != null){
//                        dump($listSupp);die();
//                      pour chaque supplément trouver au produit on ajoute
                          $product->addSupplement($supp);
 
                        }
 
//                        dump($product);die();
 
                }
 
 
 
 
            }
        }
 
 
        return $categories;
    }

Mais le probleme c'est que de cette facon un ProduitPrincipal qui a été lié comme supplément me retourne son propre id :
Nom : symfony.PNG
Affichages : 892
Taille : 8,6 Ko

Je cherche à faire une requete du style :

SELECT supplement_id, new_price FROM `supplement_product` INNER JOIN products WHERE products.id= $id AND products.id = product_id

Donc j'aimerai taper uniquement sur la colonne product_id comme ca si un Product: Frite par exemple est lié en tant que supplément il ressortira pour le produit associé, mais en tant que produit principal je n'aurai pas de supplément.

Le problème c'est que au niveau objet je ne vois pas du tout comment faire ca etant donné que ma classe SuppProduct dispose de newPrice et ma table Product de $product et $supplément, j'ai du mal a faire la liaison pour arriver a un tel résultat !

Si quelqu'un est à l'aise avec ca et peux m'expliquer!