Bonjour à tous,
Je vous explique mon problème : j'ai sur l'application WEB que je suis en train de développer une gestion d'achat en ligne. L'utilisateur doit pouvoir souscrire à une offre (un abonnement) et doit pouvoir acheter d'autres produits par la suite.
Pour se faire je me suis dit que j'allais faire quelque chose de générique, créer une classe "Products" et une classe "Offers" qui en hériterait. Jusque là pas de soucis Doctrine arrive à le gérer et me crée une table "Offers" que je peux remplir sans trop de soucis.
J'ai maintenant créé un Panier d'achat (une classe "ShoppingCart") dans lequel on peut y mettre des produits (une association ManyToMany entre Products et ShoppingCart).
Sauf que maintenant je suis confronté au problème suivant, je sais pas si quelqu'un saura m'aider :
Je veux récupérer le contenu du panier via le getter getProducts qui va lui même récupérer l'ArrayCollection products de l'entité. Il arrive bien à récupérer l'ArrayCollection mais lorsque j'essaye de récupérer le premier élément de la collection via sa fonction get(), j'ai une exception DBAL qui me dit en gros que la table "Products" n'existe pas, ce qui est normal...c’est la table "Offers" qui existe :/
Voici mes entités :
Products :
Offers :
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
48
49
50
51
52
53
54
55
56 /** * Products * * @ORM\MappedSuperclass */ class Products { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var \DateTime * * @ORM\Column(name="creation_date", type="date") */ private $creationDate; /** * @var boolean * * @ORM\Column(name="available", type="boolean") */ private $available; /** * @var string * * @ORM\Column(name="name", type="string", length=255) */ private $name; /** * @var string * * @ORM\Column(name="description", type="text") */ private $description; /** * Constructor */ public function __construct() { $this->creationDate = new \Datetime(); } //getters et setters }
ShoppingCart :
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 /** * Offers * * @ORM\Table() * @ORM\Entity(repositoryClass="InApps\PassWayBundle\Entity\OffersRepository") */ class Offers extends Products { /** * @var float * * @ORM\Column(name="price", type="float") */ private $price; /** * @var integer * * @ORM\Column(name="nbShops", type="integer") */ private $nbShops; /** * @var integer * * @ORM\Column(name="nbModels", type="integer") */ private $nbModels; /** * @var boolean * * @ORM\Column(name="broadcastMail", type="boolean") */ private $broadcastMail; /** * @var boolean * * @ORM\Column(name="broadcastMobileApp", type="boolean") */ private $broadcastMobileApp; /** * @var boolean * * @ORM\Column(name="broadcastSms", type="boolean") */ private $broadcastSms; /** * @var boolean * * @ORM\Column(name="broadcastSocialNetworks", type="boolean") */ private $broadcastSocialNetworks; /** * @var boolean * * @ORM\Column(name="broadcastAccessApi", type="boolean") */ private $broadcastAccessApi; /** * @var boolean * * @ORM\Column(name="accessFidelity", type="boolean") */ private $accessFidelity; //etc. }
Et la petite fonction de mon contrôleur si ça peut aider :
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
48
49
50
51
52
53
54
55
56 /** * ShoppingCart * * @ORM\Table() * @ORM\Entity(repositoryClass="InApps\PassWayBundle\Entity\ShoppingCartRepository") * * @ORM\HasLifecycleCallbacks */ class ShoppingCart { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var integer * * @ORM\Column(name="commandNumber", type="integer", nullable=true) */ private $commandNumber; /** * @var \DateTime * * @ORM\Column(name="creationDate", type="date") */ private $creationDate; /** * @var boolean * * @ORM\Column(name="cartConfirmed", type="boolean") */ private $cartConfirmed; /** * * @ORM\ManyToMany(targetEntity="InApps\PassWayBundle\Entity\Products", cascade={"all"}) */ protected $products; /** * * @ORM\ManyToOne(targetEntity="InApps\UserBundle\Entity\User", inversedBy="shoppingCarts", cascade={"all"}) */ protected $userOwner; //getters et setters }
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 public function subscriptionFreeConfirmedAction(){ $user = $this->getUser(); //on récupère l'id du panier en session $idPanier = $this->get('request')->getSession()->get('id_panier'); //on récupère le panier $panier = $this->getDoctrine()->getRepository('InAppsPassWayBundle:shoppingCart')->find($idPanier); //on récupère l'offre $offerId = $panier->getProducts(); var_dump($offerId);exit; }
Merci d'avance pour votre aide, si vous avez besoin de plus d'informations n'hésitez pas
Partager