Bonjour, je m'explique:
J'ai une entité Cart:
puis une entite Cart_product les unis par une collection de Cart_product par l'entite Cart "OneToMany"
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 <?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ namespace Frontend\PanierBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\entity * @ORM\Table(name="cart") */ class Cart { /** @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue */ private $id; /** * @ORM\OneToMany(targetEntity="CartProduct", mappedBy="cart",cascade={"persist", "remove"}) */ private $cart_product; /** @ORM\Column(name="created_at", type="string", length=255) */ private $createdAt; /** * Constructor */ public function __construct() { $this->cart_product = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Add cart_product * * @param \Frontend\PanierBundle\Entity\CartProduct $cartProduct * @return Cart */ public function addCartProduct(\Frontend\PanierBundle\Entity\CartProduct $cartProduct) { $this->cart_product[] = $cartProduct; return $this; } /** * Remove cart_product * * @param \Frontend\PanierBundle\Entity\CartProduct $cartProduct */ public function removeCartProduct(\Frontend\PanierBundle\Entity\CartProduct $cartProduct) { $this->cart_product->removeElement($cartProduct); } /** * Get cart_product * * @return \Doctrine\Common\Collections\Collection */ public function getCartProduct() { return $this->cart_product; } /** * Set createdAt * * @param string $createdAt * @return Cart */ public function setCreatedAt($createdAt) { $this->createdAt = $createdAt; return $this; } /** * Get createdAt * * @return string */ public function getCreatedAt() { return $this->createdAt; } public function __sleep() { return array('id','createdAt','cart_product'); } public function __wakeup() { } public function __toString() { return (string)$this->id; } }
Pour commence je fais l'exemple d'ajouter une nouvelle instance de Cart ainsi qu'une nouvelle instance de Cart_product en persistant l'instance de Cart_product par l'instance de classe Cart
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129 <?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ namespace Frontend\PanierBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="Frontend\PanierBundle\Entity\CartProductRepository") * @ORM\Table(name="cart_product") */ class CartProduct { //put your code here /** * @ORM\GeneratedValue * @ORM\Id * @ORM\Column(type="integer") */ private $id; /** * @ORM\ManyToOne(targetEntity="Cart",inversedBy="id") * */ private $cart; /** * @ORM\ManyToOne(targetEntity="\Frontend\CatalogueBundle\Entity\Produit",inversedBy="id") * */ private $leProduit; /** @ORM\Column(type="integer") * */ private $quantite; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set cart * * @param \Frontend\PanierBundle\Entity\Cart $cart * @return CartProduct */ public function setCart(\Frontend\PanierBundle\Entity\Cart $cart = null) { $this->cart = $cart; return $this; } /** * Get cart * * @return \Frontend\PanierBundle\Entity\Cart */ public function getCart() { return $this->cart; } /** * Set leProduit * * @param \Frontend\CatalogueBundle\Entity\Produit $leProduit * @return CartProduct */ public function setLeProduit(\Frontend\CatalogueBundle\Entity\Produit $leProduit = null) { $this->leProduit = $leProduit; return $this; } /** * Get leProduit * * @return \Frontend\CatalogueBundle\Entity\Produit */ public function getLeProduit() { return $this->leProduit; } /** * Set quantite * * @param integer $quantite * @return CartProduct */ public function setQuantite($quantite) { $this->quantite = $quantite; return $this; } /** * Get quantite * * @return integer */ public function getQuantite() { return $this->quantite; } public function __sleep() { return array('id','cart','quantite'); } public function __wakeup() { } }
Pour les action ci-dessus tout fonctionne a merveille j'ai bien mon enregistrement en base pour le Cart ainsi que l'enregistrement Cart_product correspondant au Cart
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 $cart_product = CartProduct() $cart_product->setQuantite(1); $cart = new Cart() $cart->setCreatedAt(date("F j, Y, g:i a")); $cart_product->setCart($cart); $cart->addCartProduct($cart_product);//insertion d'une nouvelle ligne dans la collection cartproduct /*public function addCartProduct(\Frontend\PanierBundle\Entity\CartProduct $cartProduct) { $this->cart_product[] = $cartProduct; return $this; }*/ $this->em->persist($cart); $this->em->flush();
Mais maintenant je voudrais supprimer l'enregistrement Cart_product précédemment créé en réalisant les action ci'-dessous
//je récupére mon objet Cart
mais hélas pas en base de donné donc je comprend pas pourquoi la methode $cart->removeCartProduct($cart_product); ne supprimé pas en base?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 $cart = $this->em->getRepository('MonBundle:Cart')->find(2); //je récupére mon objet Cart_product $cart_product = $this->em->getRepository('MonBundle:Cart')->find(3); $cart->removeCartProduct($cart_product); $cart->setCreatedAt(date("F j, Y, g:i a")); $this->em->persist($cart); $this->em->flush(); //en faisant un affichage de la collection de cart_product, je vois bien que le cart-product a été supprimé var_dump( $cart->getCartProduct()->getValues());
J'ai cela dit essayé avec la methode $this->em->remove($cart_product); et la ca focntionne mais la methode
$cart->removeCartProduct($cart_product) sert bien à supprimer un objet cart-product d'une collection par l'objet Cart
Une idée les amis
Merci à tous
Partager