映射的类别表如下所示:
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")
但为什么呢?在我的生产表中,列名称可能会更改
答案 0 :(得分:0)
问题似乎是添加到@ORM\Column
的{{1}}注释。问题解决了。
答案 1 :(得分:0)
当您还定义@ORM\Column
之类的关系时,不应使用@ORM\ManyToOne
注释。
在这种情况下,列的名称会自动计算或(如您所做的那样),您可以使用@ORM\JoinColumn(...)
注释覆盖它。