设置代理对象的属性失败,必须获取实际对象


setting property of a proxy object failed, had to get the actual object

我有一个这样的代码,但它不起作用:

$em = $this->container->get('doctrine.orm.entity_manager');
$accountObj->setHasCheckpoint(1);
$em->flush();

我不得不做以下事情:

$em = $this->container->get('doctrine.orm.entity_manager');
$user = $em->getRepository('UserBundle:User')->findOneById($accountObj->getId());
$user->setHasCheckpoint(1);
$em->flush();

为了获得要设置的检查点。为什么会这样?accountObj只是另一个$entity->getUser();

因为在调用flush方法时,$accountObj不由实体管理器管理(或监视),而$user是直接从$em获取的。

如果您想在不获取另一个实例的情况下更新$accountObj,那么在调用flush:之前,您应该告诉实体管理器管理$accountObj对象

$em->persist($accountObj);
$em->flush();