Bonjour, je m'explique:

J'ai une entité 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
<?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;
    }
}
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
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 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
$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();
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

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
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());
mais hélas pas en base de donné donc je comprend pas pourquoi la methode $cart->removeCartProduct($cart_product); ne supprimé pas en base?

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