methode remove dans une collection
Bonjour, je m'explique:
J'ai une entité Cart:
Code:
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:
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:
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:
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