【问题标题】:create properly a ManyToMany Recursive / Reflexive relation with doctrine ORM (Symfony)使用学说 ORM(Symfony)正确创建多对多递归/自反关系
【发布时间】:2015-06-08 13:56:18
【问题描述】:

我有一个名为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 递归自反 关系。

也就是说,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;

非常感谢。

【问题讨论】:

    标签: php database symfony doctrine-orm recursive-datastructures


    【解决方案1】:

    这可以像处理任何实体一样完成。见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;
    

    这个例子假设如下:

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

    希望这会有所帮助...

    【讨论】:

    • 我尝试了你的建议。我只需要正确编写注释。这是解决方案:/** * @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;
    • 太好了,很高兴我能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多