要保存对db的输入,我们可以使用:
$em->persist($entity);
$em->flush();
但是,如何在不使用$this->getEntityManager()->createQuery()
的情况下更新现有条目?
我正在为db。中的现有条目搜索某种$em->update()
。
答案 0 :(得分:13)
简单的方法, Fusselchen 说得对,只是举个例子
// get entity manager
$em = $this->getDoctrine()->getEntityManager();
// get from this entity manager our "entity" \ object in $item
// also we can get arrayCollection and then do all in foreach loop
$item = $em->getRepository('repoName')->findOneBy($filter);
// change "entity" / object values we want to edit
$item->setSome('someText')
//...
// call to flush that entity manager from which we create $item
$em->flush();
// after that in db column 'some' will have value 'someText'
// btw after call flush we can still use $item as 'selected object' in
// another $em calls and it will have actual (some = 'someText') values
答案 1 :(得分:6)
不,它不存在像$em->update()
这样的函数
您必须从数据库中获取对象并更新它,或者简单地编写一个自定义查询(使用DQL)来更新您需要的内容
正如您所见here
UPDATE MyProject\Model\User u SET u.password = 'new' WHERE u.id IN (1, 2, 3)
这是用于更新名为User
的实体的DQL查询示例最后但并非最不重要的是,此查询必须放入特殊的“类”,称为存储库,它将包含所有自定义sql(dql)。 这是一个很好的做法。
详细了解存储库here
答案 2 :(得分:3)
无需额外调用更新数据库。 EntityManager使您的模型在flush()
上保持同步public function updateAction($id)
{
$em = $this->getDoctrine()->getManager();
$product = $em->getRepository('AppBundle:Product')->find($id);
if (!$product) {
throw $this->createNotFoundException(
'No product found for id '.$id
);
}
$product->setName('New product name!');
$em->flush();
return $this->redirectToRoute('homepage');
}
请参阅http://symfony.com/doc/current/book/doctrine.html#updating-an-object