12

エントリを db に保存するには、次を使用できます。

$em->persist($entity);
$em->flush();

しかし、を使用せずに既存のエントリを更新するにはどうすればよい$this->getEntityManager()->createQuery()でしょうか?

していい?

私は$em->update()データベース内の既存のエントリを探しています。

4

3 に答える 3

14

簡単な方法、フッセルチェンは正しいと言いました。例を示すだけです

// 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
于 2013-05-18T06:10:01.340 に答える
6

いいえ、 のような機能はありません$em->update()
DB からオブジェクトを取得して更新するか、必要なものを更新するカスタム クエリ (DQL を使用) を作成する必要があります。

ここでわかるように

UPDATE MyProject\Model\User u SET u.password = 'new' WHERE u.id IN (1, 2, 3)

これは、User という名前のエンティティを更新するための DQL クエリの例です。

最後に重要なことですが、このクエリは、すべてのカスタム SQL (dql) を含むリポジトリと呼ばれる特別な「クラス」に配置する必要があります。これは良い習慣です。

リポジトリの詳細については、こちらをご覧ください

于 2013-01-30T08:01:31.263 に答える
3
  1. DB からエンティティを取得する
  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を参照してください

于 2013-01-30T08:13:13.097 に答える