当前位置:  开发笔记 > 编程语言 > 正文

更新后的教义2刷新实体

如何解决《更新后的教义2刷新实体》经验,为你挑选了1个好方法。

我想知道在自定义更新之后是否有一种方法可以刷新已经从数据库中检索到的实体的值。

一个例子

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我无法避免自定义查询,这是我必须做的一个简化示例。



1> goto..:

为此,您应该避免查询并使用实体管理器:

$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);

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有