繁体   English   中英

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;

就是这样。 我的皮肤表已正确映射,我得到了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文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM