我有两个实体:Cart
和Item
,这个关系是用ManyToMany
配置的,因为一个购物车可以有多个条目,一个项目可以在多个手推车中。
因此,我有一个带有item_id
和cart_id
的链接表cart_id
。
我怎么能用这个来处理数量呢?例如,如果我需要用id = 2
将800个项目添加到id = 5
购物车中?
这可以在链接表中添加字段数量吗?
谢谢你帮忙。
发布于 2016-01-07 15:30:08
您可以通过建立与实体的关系本身来做到这一点。这个实体将被称为CartItem
或CartItemLink
。
从ManyToMany
到Cart
和Item
之间的关联转变为ManyToOne
和OneToMany
的两种关联。
Cart
- ManyToOne - CartItem
- OneToMany - Item
现在,您可以向CartItem
中添加其他字段,就像问题中提到的$quantity
字段一样。
所以这个看起来是这样的:
The 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
}
The 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
}
The 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
添加一个id,因为它可以是一个复合键($item_id
+ $cart_id
),也可以是一个自然密钥,由您决定。
inside the constructor of Item
和Cart
.
https://stackoverflow.com/questions/34658557
复制相似问题