读取对象持久化但尚未用doctrine刷新

时间:2011-10-24 15:25:27

标签: doctrine-orm symfony

我是symfony2和doctrine的新手。 这是看到的问题。 我不能用:

$repository = $this->getDoctrine()->getRepository('entity');
$my_object = $repository->findOneBy($index);

在一个持久存在的对象上,但是没有冲洗掉!! 我认为getRepository从DB读取,因此它不会找到未刷新的对象。

我的问题:在我冲洗整个批次之前,如何阅读那些持久存在的对象(我认为它们是在“学说会话”中的某个地方)重新使用它们?

每个配置文件都有256个物理羽流。

每个配置文件都分配了1 plumeOptions条记录。

plumeOptions中,我有一个盒式弹药,它是PhysicalPlume的FK。

每个羽流由ID(自动生成)和INDEX(用户生成)标识。

规则:我说配置文件1连接了physical_plume_index数字3(=索引)。

现在,我想将包含所有相关数据的个人资料复制到另一个个人资料中。

创建了新的个人资料。从旧配置文件创建并复制新的256个羽流。

我想将新配置文件链接到新的羽流指数3。

点击此处:http://pastebin.com/WFa8vkt1

3 个答案:

答案 0 :(得分:13)

我想你可能想看一下这个函数:

$entityManager->getUnitOfWork()->getScheduledEntityInsertions()

返回一个仍然存在的实体对象列表。

嗯,我没有真正理解你的问题,上面你将检索一个完整的列表(作为一个数组)但你不能像使用getRepository一样查询它。我会尝试为你找到一些东西..

答案 1 :(得分:3)

我想你可能会从错误的角度看问题。 Doctrine是您的持久层和数据库访问层。域模型的责任是在对象进入内存后提供对对象的访问。所以问题归结为how do you get a reference to an object without the persistance layer

你在哪里创建你需要稍后获取的对象?创建对象的方法/服务是否可以返回对控制器的引用,以便它可以将其传播到您需要的其他位置?您是否可以发送一个您在应用程序中的其他地方收听的事件来获取该对象?

在我看来,Doctrine应该在应用程序启动时使用(尽可能早),初始化域模型,并在关闭应用程序时,在请求期间保持对域模型的任何更改。在我看来,使用存储库来获取请求中间的对象可能是代码味道,您应该看看如何重构应用程序流以消除这种需求。

答案 2 :(得分:0)

您的业务逻辑问题是有效的。

在数据库中查询未查询的对象上的findby查询,意味着在您的函数范围内已经存在更多数据库层查询对象。

另请注意,findOneBy还会检索以前使用相同功能保存的其他对象。

如果你只需要在那些新创建的对象中找到它们,你应该制作f.e.它们在会话数组变量中,并使用foreach迭代它们。

如果您需要混合已保存的项目+一些新项目,您应该分别威胁这两个部分,一个是foreach,另一个是存储库查询!