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