[英]Is it possible to get the ID of entity after persist and before Flush in Doctrine2?
[英]Why my object type in my doctrine2 entity doesn't get updated when calling persist() & flush()?
这是我正在做的事情:
$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() 方法设置了新的 object,它与引用有关,但我不明白为什么第二个 var_dump() 在 object 中显示正确的值。
getter 非常简单,只包含返回私有属性。
任何想法,我想了解这种行为。
我自己并不确定这种行为,但我很好奇,所以我在 IRC 上与 Doctrine 开发人员之一的 Jonathan Wage 讨论了这个问题。
根据 Jon 的说法,这种行为的原因是,当您将 map 和 object 直接复制到一个属性时,就像您正在做的那样,您必须克隆到 object - 换句话说,您需要一个新实例。
在检查您的数据是否已更改时,D2 会检查 object 是否与旧的相同。 它基本上只是进行 ax === y 类型比较,因此除非您有一个全新的实例,否则它不会将数据识别为已更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.