2016-01-07 46 views
2

我有兩個實體:CartItem,該關係配置爲ManyToMany,因爲購物車可以有多個項目,並且項目可以在多個購物車中。Symfony Doctrine ManyToMany添加自定義連接字段

所以我有一個鏈接表item_cartitem_idcart_id

我該如何處理數量?例如,如果我需要使用將0123項添加到id = 5的購物車中?

這是可能在鏈接表中添加一個字段數量嗎?

感謝您的幫助。

回答

4

您可以通過將關係本身與實體關聯來實現此目的。該實體將被稱爲CartItemCartItemLink

CartItem之間ManyToMany的關聯更改爲兩個協會ManyToOneOneToMany

Cart - 多對一 - CartItem - 一對多 - Item

現在你可以添加額外的字段您CartItem ,就像你的問題中提到的$quantity字段一樣。

因此,這將是這個樣子:

CartItem

class CartItem { 

    /** MANY-TO-ONE BIDIRECTIONAL, OWNING SIDE 
    * @var Cart 
    * @ORM\ManyToOne(targetEntity="Application\Entity\Cart", inversedBy="cartItems") 
    * @ORM\JoinColumn(name="cart_id", referencedColumnName="id") 
    */ 
    private $cart; 

    /** MANY-TO-ONE BIDIRECTIONAL, OWNING SIDE 
    * @var Item 
    * @ORM\ManyToOne(targetEntity="Application\Entity\Item", inversedBy="cartItems") 
    * @ORM\JoinColumn(name="item_id", referencedColumnName="id") 
    */ 
    private $item; 

    /** 
    * @var int 
    * @ORM\Column(type="integer", nullable=false) 
    */ 
    private $quantity; 

    //.. setters + getters 
} 

Cart

class Cart { 

    /** 
    * @var integer 
    * @ORM\Id 
    * @ORM\Column(type="integer", nullable=false) 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** ONE-TO-MANY BIDIRECTIONAL, INVERSE SIDE 
    * @var ArrayCollection 
    * @ORM\OneToMany(targetEntity="Application\Entity\CartItem", mappedBy="cart") 
    */ 
    private $cartItems; 

    //.. setters + getters 
} 

Item

class Item { 

    /** 
    * @var integer 
    * @ORM\Id 
    * @ORM\Column(type="integer", nullable=false) 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** ONE-TO-MANY BIDIRECTIONAL, INVERSE SIDE 
    * @var ArrayCollection 
    * @ORM\OneToMany(targetEntity="Application\Entity\CartItem", mappedBy="item") 
    */ 
    private $cartItems; 

    //.. setters + getters 
} 

我沒有添加一個ID到CartItem,因爲它可以有一個複合鍵($item_id + $cart_id)或一個自然鍵,我留給你。

Don't forget to initialize your $cartItemsArrayCollection inside the constructorItemCart