我有两个实体:Cart
和 Item
,关系是用 ManyToMany
配置的,因为购物车可以有多个项目,一个项目可以在多个购物车中。
所以我有一个链接表 item_cart
,其中包含 item_id
和 cart_id
。
我如何处理数量?例如,如果我需要将 800 件 id = 2
的商品添加到 id = 5
的购物车?
是否可以在链接表中添加字段数量?
感谢您的帮助。
最佳答案
您可以通过将关系本身与实体建立联系来做到这一点。此实体将称为 CartItem
或 CartItemLink
。
关联从 Cart
和 Item
之间的 ManyToMany
更改为两个关联 ManyToOne
和 OneToMany
:
购物车
- ManyToOne - CartItem
- OneToMany - 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
}
购物车
:
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
}
项目
:
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
添加 id,因为它可以有复合键 ($item_id
+ $cart_id
) 或自然键,我留给你。
Don't forget to initialize your $cartItems
ArrayCollection
inside the constructor Item
和 Cart
。
关于Symfony Doctrine ManyToMany 添加自定义连接字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658557/