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;Donc en BDD , je me retrouve avec une table SUppProduit : id_product,id_supp,newPrice . OK
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 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 :
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!
Partager