2017-08-07 9 views
-1

以下に見られるように、私は「永続」しません。しかし、私が行った変更は登録です。私はあなたの助けに感謝します。symfony2 EntityManagerなしで更新中

$entityManager = $this->getDoctrine()->getManager(); $entity = $entityManager->getRepository(City::class)->find(1); $entity->setName("debug name"); $entityManager->flush();

+0

を読みますあなたがやっていることがUPDATEプロセスなので、そこに何か問題があるのを見てください。すでに 'flush'を呼び出しているので、更新をトリガするために' persist'を呼び出す必要はありません。 [説明はこちら](https://symfony.com/doc/current/doctrine.html#updating-an-object) – BentCoder

+0

$ em-> refresh($ entity)は、$ entityの変更が最後になってから元に戻します取り出された。 – Cerad

答えて

4

あなたは、新しいオブジェクトを初期化するときnew City()のように、メソッドpersist()を呼び出す必要があります。 find()でデータベースからオブジェクトをフェッチすると、すでにメタデータがあります。 ドクトリンのウェブサイトから

Doctrineはアイデンティティマップパターンを使用してオブジェクトを追跡します。 がデータベースからオブジェクトを取得するたびに、DoctrineはUnitOfWork内に というオブジェクトへの参照を保持します。すべてのエンティティ 参照を保持する配列は2レベル深く、キー "ルートエンティティ名"と "id"を持っています。ここで

教義からの例です:

あなたがするEntityManager#フラッシュDoctrineは、現在管理されているすべてのオブジェクトのアイデンティティ・マップ を聞いてきます呼び出すとき。これは、 をEntityManager#に呼び出すことを何度も繰り返して、既知の オブジェクトをEntityManagerに渡す必要がないことを意味します。これは知られているエンティティのためのノーオペレーションですが、 は、他の開発者に混乱させる多くのコードを書いています。

次のコードを使用すると、持続するEntityManager#を呼び出していない場合でも、Personオブジェクト に加えられた変更を使用してデータベースを更新します:

<?php 
$user = $entityManager->find("Person", 1); 
$user->setName("Guilherme"); 
$entityManager->flush(); 

は私にはない、よりhere

関連する問題