2014-01-21 57 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关键字