2016-06-13 140 views
0

这里是我的代码:学说ORM不更新实体

 $data = $eManager->getRepository('Entity')->findOneBy(array('user_id' => $id)); 
     $data->setUpdatedAt(new \DateTime()); 
     $eManager->persist($data);   
     $eManager->flush(); 

这里的事情,我知道:从DB返回

  • 的$数据对象正确
  • 的$数据对象返回正确格式化
  • 我试过“合并”而不是“坚持”...没有好
  • setUpdatedAt方法的工作原理
  • 我试过添加“$ eManager-> commit();”以及不好的
  • 该代码不会引发错误
  • 我的实体在另一个方法中正在被正确创建。因此,实体类和数据库连接正在工作

但它实际上并没有坚持到数据库。

我是新来的Zend/Doctrine/Apigility ...有什么我需要检查,以确保数据持续?所有的文件似乎指出这是所需的方法,但我不明白为什么它不坚持数据库。

+0

在刷新数据之前尝试var_dump数据。你看到实际更新的价值? –

+0

是的 - $数据对象实际上更新。 –

+1

因为对象已经被管理,所以你根本不需要'persist()'-call。但它不应该有任何伤害,但请尝试查看symfony2分析器。在那里你可以看到所有执行的查询。也许这可以解决问题 –

回答

0

HTTP方法获胜。

正如我所提到的,我使用的是Zend/Doctrine和Apigility。答案是代码是正确的,但Apigility的中间层正在做一些事情来过滤基于HTTP方法的请求。不确定究竟是什么,因为我仍然习惯于这个框架,但是一旦我将代码从update()方法移动到它工作的patch()方法。

我考虑删除这个问题,因为它的原则部分是正确的,但对于任何可能同时使用原则和Apigility的人来说,这可能会有帮助。

+0

我认为在这里删除问题将会是一个更好的选择,因为在您的问题中从未提及您在答案中提到的整个“更新”方法。 – Wilt