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

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;


就是这样。我的皮肤表已正确映射,我得到了CmsElement的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。但是,如果我错了,请反过来。
在多面使用多个名称作为属性。例如,如果您为“多个$主页”设置“一个$皮肤”,请确保tu使用最后的“ S”,这样更容易理解。


您可以在这里找到信息,以便以正确的方式与您建立联系:Sf2 Doc

10-05 18:40