gpt4 book ai didi

php - 为什么我的 doctrine2 实体中的对象类型在调用 persist() 和 flush() 时没有得到更新?

转载 作者:可可西里 更新时间:2023-10-31 23:10:39 25 4
gpt4 key购买 nike

这是我正在做的:

    $entity = new Meta();
$obj = new stdClass();
$obj->foo = 15;
$obj->bar = 0;
$obj->bor = true;
$entity->setObject($obj);
$em->persist($entity);
$em->flush();

$entity = $entityRepository->find(1);
var_dump($entity);

返回:

object(Jo\Model\Entity)[130]
protected 'id' => int 1
protected 'user' => null
protected 'object' =>
object(stdClass)[105]
public 'foo' => int 15
public 'bar' => int 0
public 'bor' => boolean true

$entity->getObject()->bar = 9;
var_dump($entity);

返回:

object(Jo\Model\Entity)[130]
protected 'id' => int 1
protected 'user' => null
protected 'object' =>
object(stdClass)[105]
public 'foo' => int 15
public 'bar' => int 9
public 'bor' => boolean true

!

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

但是在刷新之后实体并没有在数据库中更新。

也许是因为我正在通过 getObject() 方法设置新对象,它与引用有关,但我不明白为什么第二个 var_dump() 在对象。

getter 非常简单,只包含返回私有(private)属性。

任何想法,我想了解这种行为。

最佳答案

我自己不确定这种行为,但我很好奇,所以我很快在 IRC 上与 Doctrine 开发者之一 Jonathan Wage 讨论了这个问题。

根据 Jon 的说法,这种行为的原因是当您将对象直接映射到属性时,就像您正在做的那样,您必须克隆到对象 - 换句话说,您需要一个新实例。

当检查你的数据是否改变时,D2检查对象是否与旧的相同。它基本上只是进行 x === y 类型比较,因此除非您有一个全新的实例,否则它不会识别已更改的数据。

关于php - 为什么我的 doctrine2 实体中的对象类型在调用 persist() 和 flush() 时没有得到更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5808635/

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