1

映射的类别表如下所示:

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 

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

编辑:

在我删除列名注释后,它可以工作(无论如何,名称默认为列名):

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

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

4

2 回答 2

0

看起来问题是@ORM\Column添加到$parent. 问题解决了。

于 2013-04-02T19:46:26.053 回答
0

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

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

于 2018-05-14T09:52:53.500 回答