2

私のプロジェクトには、次のような単純なエンティティがあります。

$obj = Entity\ImportResume();
$obj->setStatus(1);

$em->persist($obj);
$em->flush();
$em->clear();

$obj->setStatus(2);

$em->persist($obj);
$em->flush();
$em->clear();

しかし、教義は2回の挿入を実行します。1回の挿入と1回の更新が必要です。

オブス:

  • 最初に永続化した後に var_dump($obj) を実行すると、ID fileld にデータベース ID が入力されます。
  • 私にとって、教義は2番目の永続化でIDを無視していますが、なぜですか?

ヘルプはありますか?

4

3 に答える 3

1

私が Doctrine Docs を読んでいる場合、権利persistは最初のINSERT.

この段落は、単にオブジェクトを変更してからストレージをフラッシュするだけで十分であることを示唆しています。

7.3. 永続エンティティ

その結果、そのようなエンティティの永続的な状態は、EntityManager#flush() が呼び出されたときにデータベースと適切に同期されます。

そしてさらに:

7.7.2. 新規エンティティと管理対象エンティティの同期

フラッシュ操作は、次のセマンティクスを持つ管理対象エンティティに適用されます。

  • エンティティ自体は、少なくとも 1 つの永続フィールドが変更された場合にのみ、SQL UPDATE ステートメントを使用してデータベースに同期されます。
  • エンティティが変更されていない場合、SQL 更新は実行されません。
于 2013-02-16T13:04:35.947 に答える