あなたは、新しいオブジェクトを初期化するとき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
を読みますあなたがやっていることがUPDATEプロセスなので、そこに何か問題があるのを見てください。すでに 'flush'を呼び出しているので、更新をトリガするために' persist'を呼び出す必要はありません。 [説明はこちら](https://symfony.com/doc/current/doctrine.html#updating-an-object) – BentCoder
$ em-> refresh($ entity)は、$ entityの変更が最後になってから元に戻します取り出された。 – Cerad