在Doctrine ODM PreUpdate事件中更改另一个文档

时间:2016-12-04 19:12:13

标签: php mongodb doctrine doctrine-odm

MongoDB和Doctrine都是新的。我目前正在为我的框架设置一个模型系统,并试图实现这些事件。

这个想法是这样的:当某个模型得到更新时,应该创建/更新一个新用户(也就是一个模型)。我在PreUpdate事件中执行此操作,因此我可以捕获所做的更改(检查模型上的电子邮件地址是否已更改)。

在此活动中创建和保留新模型就像魅力一样,但是当我尝试更新用户时,我无法保存数据。我试过刷新但这会导致一个无限循环(我可以理解为什么,因为他试图再次刷新同一个文档)。

关于我应该如何完成这项工作的任何想法?在用户的工作单元上尝试了recomputeSingleDocumentChangeSet,但这似乎没有保存任何东西。

1 个答案:

答案 0 :(得分:0)

  

在用户的工作单元上尝试了recomputeSingleDocumentChangeSet,但这似乎并没有保存任何内容。

这正是你应该做的(修改用户字段后)

// In MainPage:
public static MainPage Instance {
    // This will return null when your current page is not a MainPage instance!
    get { return (Window.Current.Content as Frame).Content as MainPage; }
}

// Now in HomePage it's only:
MainPage.Instance.OpenTab(TabContent.Settings);

并且没有其他内容,特别是不要使用$user->setSomething(true); $uow->recomputeSingleDocumentChangeSet(/* ... */); ,因为您已经在flush内。 flush使Doctrine重新计数更改,稍后将包含在文档的更新查询中。

  

在此活动中创建和保持新模型就像魅力一样

然而,这听起来很奇怪,因为在recomputeSingleDocumentChangeSet事件发生时新的对象不应该到达数据库(除非你发布了另一个preUpdate,这可能会产生不必要的副作用)因为插入处理在更新之前。