gpt4 book ai didi

php - Doctrine2 Entites - 是否可以将 "dirty"对象与数据库中的对象进行比较

转载 作者:可可西里 更新时间:2023-11-01 13:08:41 26 4
gpt4 key购买 nike

是否可以比较当前“脏”版本(其某些属性已更改但尚未持久化的对象)和“原始”版本(数据仍在数据库中)之间的实体对象的状态.

我的假设是我可以有一个“脏”对象,然后从数据库中提取一个新对象并比较两者。例如:

$entity = $em->getRepository('MyContentBundle:DynamicContent')->find($id);

$editForm = $this->createContentForm($entity);
$editForm->bind($request);

if ($editForm->isValid()) {
$db_entity = $em->getRepository('MyContentBundle:DynamicContent')->find($id);

// compare $entity to $db_entity

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

return $this->redirect($this->generateUrl('content_edit', array('id' => $id)));
}

但根据我的经验,$entity 和 $db_entity 始终是同一个对象(并且在 $request 绑定(bind)之后具有与 $entity 相同的数据)。为了进行比较,有没有办法在“脏”版本旁边获得 $entity 的新版本?我见过的所有解决方案都会在表单绑定(bind)发生之前提取所需的数据,但我宁愿没有这种限制。

更新:为澄清起见,我不仅要查找实体属性的更改,还要查找其相关实体集合的更改。

最佳答案

你可以通过 Doctine 的 UnityOfWork 获取实体上发生了什么变化。这很简单:在你持久化实体之后,Doctrine 知道要在数据库中更新什么。您可以通过以下方式获取这些信息:

// Run these AFTER persist and BEFORE flush
$uow = $em->getUnitOfWork();
$uow->computeChangeSets();
$changeset = $uow->getEntityChangeSet($entity);

关于php - Doctrine2 Entites - 是否可以将 "dirty"对象与数据库中的对象进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388618/

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