我有兩個實體:Cart
和Item
,該關係配置爲ManyToMany
,因爲購物車可以有多個項目,並且項目可以在多個購物車中。Symfony Doctrine ManyToMany添加自定義連接字段
所以我有一個鏈接表item_cart
與item_id
和cart_id
。
我該如何處理數量?例如,如果我需要使用將0123項添加到id = 5
的購物車中?
這是可能在鏈接表中添加一個字段數量嗎?
感謝您的幫助。
我有兩個實體:Cart
和Item
,該關係配置爲ManyToMany
,因爲購物車可以有多個項目,並且項目可以在多個購物車中。Symfony Doctrine ManyToMany添加自定義連接字段
所以我有一個鏈接表item_cart
與item_id
和cart_id
。
我該如何處理數量?例如,如果我需要使用將0123項添加到id = 5
的購物車中?
這是可能在鏈接表中添加一個字段數量嗎?
感謝您的幫助。
您可以通過將關係本身與實體關聯來實現此目的。該實體將被稱爲CartItem
或CartItemLink
。
從Cart
和Item
之間ManyToMany
的關聯更改爲兩個協會ManyToOne
和OneToMany
:
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 $cartItems
ArrayCollection
inside the constructor的Item
和Cart
。