首页 > 解决方案 > 学说:与属性的 OneToMany 关系

问题描述

首先,感谢您的宝贵时间。

我正在用 Symfony5 开发一个网站,我正在使用 Doctrine2 来创建和管理数据库。但是,我一直在努力解决两个实体之间的关系。

该数据库包含 2 个重要的表:Shard 和 Wheel。

这些轮子用于在碎片上绘制图案,一个轮子可用于在多个碎片上绘制。相反,每个 Shard 只使用一个 Wheel。如果使用 OneToMany/ManyToOne 关系,这将相当容易,但问题是这种关系需要包含一个属性“ equal ”(如果图案是由这个确切的 Wheel 绘制的,则为布尔值,如果非常接近,则为 false,但不是确切的一个)。

我浏览了关于关系的学说文档章节,但我没有找到任何关于 OneToMany 与属性的关系(我看到了这一点,但据我了解,你不能添加属性)。

过了一会儿,我决定通过创建一个实体“ ShardWheel ”来“手动”完成它,所以我做了一些类似的事情:

分片实体

/**
 * @ORM\Table(name="shard")
 * @ORM\Entity(repositoryClass="App\Repository\ShardRepository")
 */
class Shard {
 ...
    /**
     * @var ShardWheel|null
     *
     * @ORM\OneToOne(targetEntity="App\Entity\ShardWheel", mappedBy="shard")
     * @ORM\JoinColumn(nullable=true)
     */
    private $shardWheel;
 ...

ShardWheel 实体

/**
 * @ORM\Table(name="shard_wheel")
 * @ORM\Entity(repositoryClass="App\Repository\ShardWheelRepository")
 */
class ShardWheel {

    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var bool
     *
     * @ORM\Column(name="equal", type="boolean")
     */
    private $equal;

    /**
     * @var Wheel
     *
     * @ORM\ManyToOne(targetEntity="App\Entity\Wheel", inversedBy="draw")
     * @ORM\JoinColumn(nullable=false)
     */
    private $wheel;

    /**
     * @var Shard
     *
     * @ORM\OneToOne(targetEntity="App\Entity\Shard", inversedBy="shardWheel")
     * @ORM\JoinColumn(nullable=false)
     */
    private $shard;

车轮实体

/**
 * @ORM\Table(name="wheel")
 * @ORM\Entity(repositoryClass="App\Repository\WheelRepository")
 */
class Wheel {
 ...
    /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="App\Entity\ShardWheel", mappedBy="wheel")
     * // This just serve as an indicator, the constructor initializes the ArrayCollection
     * @ORM\JoinColumn(nullable=true)
     */
    private $draw;
 ...

问题是它似乎不起作用。我知道这不是一件常见的事情,所以没有很多关于这个的问题/答案。我尝试了很多组合,我迷路了。我可能很笨。有什么建议么 ?

PS:对不起,如果我有任何拼写错误和/或奇怪的句子,已经很晚了,我真的很累。

编辑:我制作了我想要的真正快速的 MCD:MCD

标签: phpmysqlsymfonydoctrine-ormsymfony5

解决方案


推荐阅读