0

我有一个具有许多关系的复杂实体,因此我需要在许多页面中创建多个表单来创建一个。因此,我使用会话来保留我的实体。一切正常,但是到了刷新的时候,实体管理器返回“通过关系的实体未配置为级联持久化”,认为某些实体是新的,但它们实际上存储在 db 中!

例如,我使用 $u->setGroup(Group $group); 创建了一个具有多对一组的用户;($group 是数据库中的现有组)。当我将它放入会话中,然后将其放回另一个页面然后刷新它时,实体管理器会尝试创建一个全新的组,但不知道它是 db 中的现有组。

我用一个小技巧来克服这个:

$u = $this->get('session')->get('userToAdd');
$group = $em->getRepository('MyBundle\Entity\Group')->find($u->getGroup()->getId());
$u->setGroup($group);

这样,EM 将识别存储在 db 中的组,并且刷新会正常进行,但是由于我的实体具有如此多的关系,因此对每个实体都执行此操作非常方便。

对这个问题有什么想法吗?

4

2 回答 2

0

在查找组之前尝试刷新 $u 对象。

$em->refresh($u)
于 2013-02-01T12:30:12.830 回答
0

你所要做的:

$em->merge($u);
于 2016-06-13T11:24:10.987 回答