gpt4 book ai didi

php - Doctrine 2 更新后刷新实体

转载 作者:行者123 更新时间:2023-12-04 16:44:38 24 4
gpt4 key购买 nike

我想知道是否有办法在自定义更新后刷新已从数据库中检索到的实体的值。

一个例子

<?php

/**
* Element
*
* @ORM\Table(name="table_element")
*/
class Element{

/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id

/**
*
* @var string
*
* @ORM\Column(name="element_name", type="string", length=255)
*/
private $name

public function setName($name){
$this->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();

我需要打印“新测试名称”而不再次使用选择,例如 $em->persist($element); $em->refreshAllManagedEntities();

有办法吗?

附言我无法避免自定义查询,这是我必须做的一个示例。

最佳答案

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

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

关于php - Doctrine 2 更新后刷新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41692382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com