使用Doctrine ORM如何从自己的表中获取表来存储记录


Using Doctrine ORM how to get a table to store record from its own table?

我想将此表中的一条记录存储在"parent"字段中。产生的错误如下

从MODL119''Entity''Role到MODL119''Identity''Role的关系引用的列名"id"不存在

以及产生错误的PHP实体类

<?php
namespace MODL119'Entity;
use Doctrine'ORM'Mapping as ORM;
/** @ORM'Entity @ORM'Table(name="role")
 */
class Role
{
    /** @ORM'Id
     *  @ORM'Column(name="role_id", type="bigint")
     *  @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $roleId;
    /** @ORM'ManyToOne(targetEntity="MODL119'Entity'Role")
     *  @ORM'JoinColumn(name="role_id", referencedColumnName="role_id")
     */
    protected $parent;

    public function setParent(Role $parent)
    {
        $this->parent = $parent;
    }
    public function getParent()
    {
        return $this->parent;
    }
    public function setRoleId($roleId)
    {
        $this->roleId = $roleId;
    }
    public function getRoleId()
    {
        return $this->roleId;
    }
}

有什么想法吗?

属性Role::$parent需要在基础表中表示为外键引用,因此您需要修改注释并更改JoinColumn.name,如下所示:

/** 
 * @ORM'ManyToOne(targetEntity="MODL119'Entity'Role")
 *  @ORM'JoinColumn(name="parent_id", referencedColumnName="role_id")
 */
protected $parent;

这将在实体中建立一个一对一的自引用关联,并在基础表中创建一个parent_id列。

另请参阅:

  • 一对多自参考关联
  • 多对多自参照关联

希望这有帮助:)