2014-01-21 95 views
0

我想使用一個實體更新行:學說2 ZF2如何更新行

$linker = $this->getObjectManager()->getRepository('\Schema\Entity\Link')->find('link_id', 7853); 
      $linker->setSampleTitle($mytitle); 
      $linker->setSampleDesc($mydesc); 

      $this->getObjectManager()->merge($linker); 
      $this->getObjectManager()->flush(); 

,但我得到:需要進行此操作打開的事務。

+0

其實您的兩個'找到( )'方法是正確的。然而,第一個「查詢表」,第二個「查詢數據庫」 - 可以這麼說......就像@doeni指出的那樣,您只是使用錯誤的函數來保存更新的實體。這是'persist()'你在找什麼,而不是'merge()' – Sam

+0

嗨,事實是,我完全刪除$ this-> getObjectManager() - > merge($ linker);並使用我在下面發佈的方法,它既不使用'persist'也不使用merge。我只使用了「合併」,因爲我在另一篇文章中讀到它,卻不知道究竟是什麼。是否需要使用'persist()'? – Nikitas

+0

是的,我自己也忘記了。更新只需要刷新...持續不需要,因爲這是在編輯的情況下內部處理的。 flush()將它寫入數據庫 – Sam

回答

2

我剛剛意識到在find()方法裏面我不應該把'link_id',而是\Schema\Entity\Link。所以getRepository()這裏不需要......

正確的是:$linker= $this->getObjectManager()->find('\Schema\Entity\Link', 7853);

+0

你明白了。請將您自己的答案標記爲解決方案。 –

2

試試這個:

$this->getObjectManager()->persist($linker); 
$this->getObjectManager()->flush(); 

而且你可能想使用的,而不是發現findOneBy。

0
$Link = $this->getObjectManager->getRepository('Schema\Entity\Link')->find(7853); 

和@id在定義link_id爲ID的實體或使用findBy關鍵字