gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:11:39 25 4
gpt4 key购买 nike

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

皮肤.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

Cms元素:

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 属性
  • 多对一关系是指具有多个实体的一侧链接到具有一个实体的一侧,因此请定义多侧和单侧。我假设 CmsElement 是多端,因此我对 CmsElement 使用 ManyToOne,对其他端使用 OneToMany。但如果我错了,请颠倒过来。
  • 在多端使用属性的复数名称。例如,如果您为多个 $homepages 设置一个 $skin,请确保使用最后的“S”,这样更容易理解。

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

关于php - Symfony2 映射适用于一个实体,但不适用于另一个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com