エントリを db に保存するには、次を使用できます。
$em->persist($entity);
$em->flush();
しかし、を使用せずに既存のエントリを更新するにはどうすればよい$this->getEntityManager()->createQuery()
でしょうか?
していい?
私は$em->update()
データベース内の既存のエントリを探しています。
簡単な方法、フッセルチェンは正しいと言いました。例を示すだけです
// 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
いいえ、 のような機能はありません$em->update()
。
DB からオブジェクトを取得して更新するか、必要なものを更新するカスタム クエリ (DQL を使用) を作成する必要があります。
ここでわかるように
UPDATE MyProject\Model\User u SET u.password = 'new' WHERE u.id IN (1, 2, 3)
これは、User という名前のエンティティを更新するための DQL クエリの例です。
最後に重要なことですが、このクエリは、すべてのカスタム SQL (dql) を含むリポジトリと呼ばれる特別な「クラス」に配置する必要があります。これは良い習慣です。
リポジトリの詳細については、こちらをご覧ください
データベースを更新するための余分な呼び出しはありません。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を参照してください