我有以下代码:
$em = $this->getDoctrine()->getManager();
if($groupType == 'existing'){
$urlGroup = $em->getRepository('UrlBuilderBundle:UrlGroup')->find($groupId);
}elseif($groupType == 'new'){
$urlGroup = new UrlGroup();
$groupName = $submittedData['groupName'];
$urlGroup->setName($groupName);
$em->persist($urlGroup);
}
$url = new Url();
$url->setName($name);
$url->setAuthorUser($authorUser);
$url->setUrl($generatedUrl);
$url->setUrlGroup($urlGroup);
$em->persist($url);
$em->flush();
$urlGroupName = $urlGroup->getName();
$urlCount = count($urlGroup->getUrls());
创建新的UrlGroup后,即使已为给定的UrlGroup添加了网址,最后一行(子网址对象的数量)也始终返回零。此代码用于AJAX调用。
页面刷新count()返回正确的数字。
如果有人能帮助解决这个问题,那就表示赞赏。
答案 0 :(得分:1)
这是因为你执行$em->flush()
这意味着执行了数据库操作,但这并不意味着你的$urlGroup
对象被刷新 - php在flush
之前仍然处于状态执行,意思是0 urls
。
尝试致电:
$em->refresh($urlGroup)
在$em->flush
之后。这将使用数据库
$urlGroup
答案 1 :(得分:0)
我认为接受的答案有点误导 - 是的,你会用它的集合刷新对象,但在我看来这是一种解决方法。通常flush
给出的是模型的标识符(id' s)。
您在$url->setUrlGroup($urlGroup);
方面呼叫owning
,但未更新inverse
方。需要在setUrlGroup
类中的Url
方法中执行哪些操作:
public function setUrlGroup($group)
{
$this->urlGroup = $group;
$group->addUrl($this);
}
尊敬地UrlGroup
班:
public function addUrl($url)
{
if (!$this->$urls->contains($url) {
$this->$urls->add($url);
}
}
据说上面$urls
是ArrayCollection
的实例。
这可以修复映射的inverse
侧的关系。我强烈建议这样做。