gpt4 book ai didi

php - 实体的 Doctrine 刷新副本

转载 作者:行者123 更新时间:2023-12-02 21:24:06 24 4
gpt4 key购买 nike

我有一个 CustomerAccount 实体。在该实体通过表单对其进行更改之后,但在该实体被持久化到数据库之前,我需要获取与该实体相同的 CustomerAccount 的新副本,因为它当前存在于数据库中。我需要这样做的原因是我想用我的服务中的旧数据和新数据触发一个已更改的事件。

我使用的一个 hack 是 $oldAccount = unserialize(serialize($account)); 并将旧的传递到我的服务中,但这真的很 hackish。

真正想做的是让 Doctrine 拉回原始实体的副本(同时保留对新版本的更改)。

这可能吗?

更新

看来我真正想做的事情在这个时候以 Doctrine 的架构方式最终是不可能的。

更新2

我在底部添加了我最终使用的解决方案。我对它不是很满意,因为它感觉很老套,但它完成了工作并让我继续前进。

最佳答案

视情况而定。

我的意思是,Doctrine2 使用 IdentityMap这可以防止您“不小心”在同一个请求中一遍又一遍地查询同一个对象的数据库。再次强制获取实体对象的唯一方法是 detach来自实体管理器的实体并再次请求实体。

然而,这可能会导致一些奇怪的行为,这些行为可能会“滑出”您的控制范围:

  • 你不能再持久化一个分离的对象
  • 如果您尝试保留与您的分离实体相关(“链接”)的对象,您将遇到麻烦(有时很难调试)

那么,为什么不尝试使用内置的 php clone功能?也许更适合你,可以让你免于大量调试

代码示例:

$em = $this->getDoctrine()->getManager();
$fetched_entity = $em->findOnById(12);
$cloned_entity = clone $fetched_entity;
//and so on ...

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

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