Symfony2映射适用于一个实体,但不适用于另一个实体


Symfony2 mapping works for one entity but not the other

我有两个实体映射在一起。

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