2016-06-13 131 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