我有两个网友:Cart
和Item
,关系是使用ManyToMany
配置的,因为购物车可以包含多个商品,而商品可以位于多个购物车中。
所以我有item_cart
和item_id
的链接表cart_id
。
我如何处理数量?例如,如果我需要使用id = 2
将<{1}}的800件商品添加到购物车中?
是否可以在链接表中添加字段数量?
感谢您的帮助。
答案 0 :(得分:5)
您可以通过将关系本身设置为实体来实现此目的。该实体将被称为CartItemLink
或ManyToMany
。
关联从Cart
和Item
之间的ManyToOne
更改为两个关联OneToMany
和Cart
:
CartItem
- ManyToOne - Item
- OneToMany - 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
}
:
CartItem
我没有向$item_id
添加ID,因为它可以有一个复合键($cart_id
+ Item
)或一个自然键,我留给你。< / p>
Cart
和{{1}}的
Don't forget to initialize your $cartItems
ArrayCollection
inside the constructor。