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

标签 symfony doctrine-orm doctrine

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

所以我有一个链接表 item_cart,其中包含 item_idcart_id

我如何处理数量?例如,如果我需要将 800 件 id = 2 的商品添加到 id = 5 的购物车?

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

感谢您的帮助。

最佳答案

您可以通过将关系本身与实体建立联系来做到这一点。此实体将称为 CartItemCartItemLink

关联从 CartItem 之间的 ManyToMany 更改为两个关联 ManyToOneOneToMany:

购物车 - 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 ItemCart

关于Symfony Doctrine ManyToMany 添加自定义连接字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658557/

相关文章:

symfony2 不是有效的实体或映射的父类(super class)

symfony - Doctrine Sluggable - 列 'slug' 不能为空

php - 与学说 2 中 Eloquent 的 chunk 对应的是什么?

mysql - 当 null 时,如何让带有 where not 子句的 Doctrine 查询生成器返回值

Symfony 4 在 Controller 操作中禁用分析器

Symfony 4 服务于不同环境中的本地绑定(bind)

symfony - 扩展 FOSUserBundle 密码验证以需要特殊字符

php - 使用 doctrine 2 查询生成器加入 3 个表

php - 无法在 doctrine php 中找到名为 mysql 的驱动程序

php - Elasticsearch 中可选的自父关系