我想知道在自定义更新之后是否有一种方法可以刷新已经从数据库中检索到的实体的值。
一个例子
name = $name; } public function getName(){ return $this->name; } public function getId(){ return $this->id; } } // Inside Controller $em = $this->getDoctrine()->getManager(); $element = $em->getRepository('Element')->find(1); // This prints "Test 1" echo $element->getName(); $qb = $em->createQueryBuilder(); $qb->update('Element', 'E') ->set('E.name', 'New Test Name') ->where('E.id = :id') ->setParameter('id', $element->getId()) ; $qb->getQuery()->execute(); // This still prints "Test 1", i need to print "New Test Name" without using again a select // Something like $em->refreshManagedEntities(); echo $element->getName();
我需要打印“ New Test Name”而不再次使用选择,例如$ em-> persist($ element);。$ em-> refreshAllManagedEntities();
有办法吗?
PS我无法避免自定义查询,这是我必须做的一个简化示例。
为此,您应该避免查询并使用实体管理器:
$qb = $em->createQueryBuilder(); $element = $em->getRepository('Element')->find(1); // Prints "Test 1" echo $element->getName(); $element->setName('New Test Name'); $em->persist($element); $em->flush(); // Prints "New Test Name" echo $element->getName();
如果必须运行查询,或者如果实体更改是在脚本之外完成的,则应使用 refresh
$em->refresh($entity);