我的自引用实体类出了什么问题?

时间:2013-04-01 13:37:05

标签: symfony doctrine

映射的类别表如下所示:

id | parent_id | name

实体类:

class Category
{

/**
 * @ORM\Id
 */
protected $id;


/**
 * @ORM\Column(name="parent_id", type="integer") <-- if removed it works
 * @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
 * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
 */
protected $parent;


/**
 * @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
 */
protected $children;


/**
 * @ORM\Column(name="name", type="string")
 */
protected $name;


/**
 * @ORM\OneToMany(targetEntity="Product", mappedBy="category")
 */
protected $products;


public function __construct()
{
    $this->products = new ArrayCollection();
    $this->children = new ArrayCollection();
}

}

在Symfony探查器中,我收到以下映射错误:

关联Test \ TestBundle \ Entity \ Category#children指的是拥有方字段Test \ TestBundle \ Entity \ Category#parent,未定义为关联。

关联Test \ TestBundle \ Entity \ Category#children指的是不存在的拥有方字段Test \ TestBundle \ Entity \ Category#parent。

还有错误通知:

Notice: Undefined index: parent in C:\inetpub\www\Symfony\vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 1575 

为什么呢?我的课程基本上只是手册中的复制/粘贴。

修改

删除列名称annonation后,它的工作原理(名称默认为列名):

* @ORM\Column(name="parent_id", type="integer")

但为什么呢?在我的生产表中,列名称可能会更改

2 个答案:

答案 0 :(得分:0)

问题似乎是添加到@ORM\Column的{​​{1}}注释。问题解决了。

答案 1 :(得分:0)

当您还定义@ORM\Column之类的关系时,不应使用@ORM\ManyToOne注释。

在这种情况下,列的名称会自动计算或(如您所做的那样),您可以使用@ORM\JoinColumn(...)注释覆盖它。