我有两个实体映射在一起。
Skin.php:
/**
* @var CmsElement
*
* @ORM'ManyToOne(targetEntity="CmsElement")
* @ORM'JoinColumns({
* @ORM'JoinColumn(name="homepage_id", referencedColumnName="id")
* })
*/
private $homepage;
CmsElement.php:
/**
* @var Skin
*
* @ORM'ManyToOne(targetEntity="Skin")
* @ORM'JoinColumns({
* @ORM'JoinColumn(name="skin_id", referencedColumnName="id")
* })
*/
private $skinId;
就是这样。我的Skin表被正确映射,我得到了cmelement的id。然而,在我的Cmselement我没有得到所需的skinId…它总是保持NULL。密码是一样的,为什么不行?
一个更好理解的例子:
皮肤:id: 1
homepage_id: 2
CmsElement:
id: 2
skin_id: NULL
为了设置ManyToOne关系,您必须以以下两种方式指定它:
// Skin.php
/**
* @var CmsElement
*
* @ORM'OneToMany(targetEntity="CmsElement", mappedBy="skinId")
* @ORM'JoinColumns({
* @ORM'JoinColumn(name="homepage_id", referencedColumnName="id")
* })
*/
private $homepage;
// CmsElement.php :
/**
* @var Skin
*
* @ORM'ManyToOne(targetEntity="Skin", inversedBy="homepage")
* @ORM'JoinColumns({
* @ORM'JoinColumn(name="skin_id", referencedColumnName="id")
* })
*/
private $skinId;
但是,请注意以下几点:
- 使用$skin代替$skinId,因为你引用的是一个实体,而不仅仅是一个id属性
- 关系ManyToOne指的是有多个实体的一面链接到有一个实体的一面,所以请定义哪个是多面和单面。我假设CmsElement是多方,所以我在CmsElement上使用了ManyToOne和OneToMany to other。但如果我错了,请把它颠倒过来。
- 在多个属性中使用复数名称。例如,如果你为Many $主页设置One $skin,一定要使用最后的"S",这样更容易理解。
您可以在这里找到信息,以便以正确的方式处理您的关系:Sf2 Doc