与学说 ORM (Symfony) 正确创建 ManyToMany 递归/自反关系

create properly a ManyToMany Recursive / Reflexive relation with doctrine ORM (Symfony)

我将此实体命名为 Pointscomptage.php:

class Pointscomptage

    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;

        /**
         * @var string
         *
         * @ORM\Column(name="invariant", type="string", length=150, nullable=false)
         */
        private $invariant;

        /**
         * @var string
         *
         * @ORM\Column(name="nom", type="string", length=150, nullable=false)
         */
        private $nom;

        /**
         * @var string
         *
         * @ORM\Column(name="consoProduction", type="string", length=150, nullable=false)
         */
        private $consoProduction;

        /**
         * @var Typesenergie
         *
         * @ORM\ManyToOne(targetEntity="Typesenergie", inversedBy="pointscomptage")
         * @ORM\JoinColumn(name="typesenergie_id", referencedColumnName="id")
         */
        private $typesenergie;

        /** ... getters and setters */

我需要了解如何在此基础上创建 ManyToMany recursivereflexive 关系实体。

也就是说,一个点数可以没有(0)个或很多(n)个点数

如何在同一个实体上建立这种关系?


编辑

感谢 Jovan Perovic 回答和建议这是我找到的解决方案,我们需要尊重学说注释:

/**
     * @ORM\ManyToMany(targetEntity="Pointscomptage")
     * @ORM\JoinTable(name="pointscomptage_link_table",
     * joinColumns={
     *     @ORM\JoinColumn(name="pointscomptage_id", referencedColumnName="id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="id_pointscomptage2", referencedColumnName="id")
     *   }
     * )
     **/
    private $pointscomptages;

非常感谢。

这可以通过与任何实体相同的方式来完成。参见 official docs on @ManyToMany

例如:

/**
 * @ManyToMany(targetEntity="Pointscomptage")
 * @JoinTable(name="pointscomptage_link_table",
 *      joinColumns={@JoinColumn(name="id_pointscomptage1", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="id_pointscomptage2", referencedColumnName="id")}
 *      )
 **/
private $pointscomptages;

此示例假设如下:

  • 关系是单向的。双向同样容易实现,并且在上面的文档 link 中也有描述。
  • 正在连接 table 名为 pointscomptage_link_table
  • 正在连接 table pointscomptage_link_table 包含两个列键:
    • id_pointscomptage1
    • id_pointscomptage2

希望对您有所帮助...