我在symfony2 / doctrine2中有延迟加载的问题。 我有一个普通的对象(例如:type item),这个对象有一个id。如果我在运行时查看对象,我会看到id已设置。图标和金额等其他参数均为空。我知道,这是延迟加载的工作方式,但是当我调用getter(getIcon)时没有任何反应。图标属性仍为空。我也尝试调用__load方法,但它没有帮助。
抱歉,忘记了代码
class Character {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="Entity\Item", mappedBy="character")
*/
protected $item;
/*********************************************************************
* Custom methods
*/
public function getItem() {
return $this->item;
}
}
这是延迟加载不起作用的对象。
class Item {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="integer")
*/
protected $amount;
/**
* @ORM\Column(type="string")
*/
protected $icon;
}
EDIT2:
字符类的构造函数
public function __construct()
{
$this->item = new \Doctrine\Common\Collections\ArrayCollection();
}
答案 0 :(得分:0)
那么您的初始帖子的主要评论指出,您需要在Item实体中实现ManyToOne关系,以使所有内容正常工作。
在你的角色实体中你有这行代码
/**
* @ORM\OneToMany(targetEntity="Entity\Item", mappedBy="character")
*/
protected $item;
这表示您与实体项目有关系,该实体项目在属性"字符"中突破关系。在此属性中存储关系。如果查看数据库,则无法找到任何存储的关系,因为类Item没有描述的映射属性字符。就像gp_sflover所指出的那样,OneToMany关系需要是双向的,并且需要在"拥有"中的一个所需的ManyToOne关系。侧。所以你需要做的是,将以下代码添加到你的项目实体
/**
* @ORM\ManyToOne(targetEntity="Entity\Character", inversedBy="item")
*/
protected $character;
inversedBy属性创建双向关系。如果没有此声明,您将无法从Character实体加载getItems。
如果您更改了代码,则必须更新数据库并恢复元素。在此之后,一切都会正常。