Symfony Doctrine ManyToMany添加自定义连接字段

时间:2016-01-07 15:08:44

标签: symfony doctrine-orm doctrine

我有两个网友:CartItem,关系是使用ManyToMany配置的,因为购物车可以包含多个商品,而商品可以位于多个购物车中。

所以我有item_cartitem_id的链接表cart_id

我如何处理数量?例如,如果我需要使用id = 2将<{1}}的800件商品添加到购物车中?

是否可以在链接表中添加字段数量?

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

您可以通过将关系本身设置为实体来实现此目的。该实体将被称为CartItemLinkManyToMany

关联从CartItem之间的ManyToOne更改为两个关联OneToManyCart

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