我有两个实体:CartItem,该关系使用ManyToMany配置,因为一个购物车可以有多个项目,而一个项目可以在多个购物车中。

所以我有一个链接表item_cartitem_idcart_id

我该如何处理数量?例如,如果我需要将带有id = 2的800个项目添加到带有id = 5的购物车中?

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

感谢帮助。

最佳答案

您可以通过将关系本身与实体建立关系来实现。该实体称为CartItemCartItemLink

关联从ManyToManyCart之间的Item变为ManyToOneOneToMany两个关联:
Cart-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
}
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中添加ID,因为它可以具有复合键($item_id + $cart_id)或自然键,由您自己决定。
$cartItemsArrayCollection中的Don't forget to initialize your Item Cart inside the constructor

10-08 19:23