用学说ORM (Symfony)创建适当的多多递归/自反关系


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 */

我需要了解如何在此实体上创建 manymany 递归自反关系。

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

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


编辑

感谢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;

非常感谢。

对于任何实体都可以这样做。查看官方文档@ manymany

例如:

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

这个例子假设如下:

  • 关系是单向的。双向也很容易实现,在上面的文档链接中也有描述。
  • 连接表命名为pointscomptage_link_table
  • 连接表pointscomptage_link_table包含两个列键:
    • id_pointscomptage1
    • id_pointscomptage2