我有两个实体:Cart
和Item
,ManyToMany
因为一个购物车可以有多个项目,并且一个项目可以在多个购物车中,所以配置了该关系。
所以我有一个链接表item_cart
与item_id
和cart_id
。
我该如何处理数量?例如,如果我需要将800项商品添加id = 2
到购物车中id = 5
?
是否可以在链接表中添加字段数量?
感谢帮助。
您可以通过将关系本身与实体建立关系来实现。该实体称为CartItem
或CartItemLink
。
关联从和ManyToMany
之间变为两个关联,并且:Cart
Item
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
)或自然键,并且我可以自己决定。
别忘$cartItems
ArrayCollection
了在Item
和的内部构造函数中进行初始化Cart
。