我有一种情况,并不确定我做错了什么。在Sumfony 3.3中,我创建了实体页面和语言之间的关系,其中Page与多种语言相关,当我搜索Page并获取Page对象时,属性Languages返回仅包含最后一个Language对象的集合。无论集合中有多少个对象,它总是最后返回。
页面实体:
/**
* @ORM\OneToMany(targetEntity="Language", mappedBy="page", cascade={"ALL"}, indexBy="page_id")
*/
private $languages;
语言实体:
/**
* @ORM\ManyToOne(targetEntity="Page", inversedBy="languages")
*/
private $page;
public function addLanguage(\AppBundle\Entity\Langaugee $language)
{
$this->languages[] = $language;
return $this;
}
public function removeLanguage(\AppBundle\Entity\Language $language)
{
$this->$languages->removeElement($language);
}
public function getLanguages()
{
return $this->languages;
}
页面对象在PageService:
中获取public function getPageByName($name)
{
return $this->pageRepository->findBy(array("name"=>$name));
}
由于属性$ languages默认设置为lazy,JMS序列化程序在序列化Page对象时提取语言集合
有人有这个问题吗?
答案 0 :(得分:0)
经过彻底调试后,我发现indexBy在这里被误用了。定义的indexBy = page_id始终提供相同的值,因此每个映射到SimpleObjectHydrator中的实体的记录都会溢出现有记录,只留下最后添加的语言对象集合
答案 1 :(得分:0)
我知道它是一个老帖子,但是下面的解决方案对我有用。
在获取数据之前,我必须通过调用此方法来清除存储库类方法中的EntityManager缓存。
$this->_em->clear();
此处_em
是存储库类中可用的默认EntityManager
。