首页 >数据库 >mysql教程 >教义2中如何处理带有额外字段的多对多关系?

教义2中如何处理带有额外字段的多对多关系?

Patricia Arquette
Patricia Arquette原创
2024-12-22 01:55:11814浏览

How to Handle Many-to-Many Relationships with Extra Fields in Doctrine 2?

原则 2 和带有额外字段的多对多链接表:澄清

澄清查询

在最初的问题,用户寻求有关在包含附加字段(库存)的链接表中创建多对多关系的指导 数量)。使用 Doctrine 访问库存量值并生成数据库表结构时出现了挑战。

解决问题

问题源于多对多的假设-许多具有附加值的关系都可以这样对待。但是,具有附加值的多对多关系将成为具有标识符和值的新实体。

解决方案

解决方案涉及创建一个名为 Stock 的单独实体包含以下列:

  • 金额(用于存储库存value)
  • 与产品和商店实体的关系

这允许系统准确地建模多对多关系,从而使用 Doctrine 提供对库存金额值的访问。 🎜>

更新的实体

以下是调整后的实体定义:

产品:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="product") @ORM\Entity() */
class Product
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="product_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */
    protected $stockProducts;
}

Sto回复:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="store") @ORM\Entity() */
class Store
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="store_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") */
    protected $stockProducts;
}

库存:

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="stock") @ORM\Entity() */
class Stock
{
    /** ORM\Column(type="integer") */
    protected $amount;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="store_id", referencedColumnName="id", nullable=false) 
     */
    protected $store;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=false) 
     */
    protected $product;
}

数据库结构

此更改导致数据库结构如下所示:

以上是教义2中如何处理带有额外字段的多对多关系?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn