私は長い間、SQL クエリ ベースのデータベース アクセス レベルを使用していました。しかし今、ORM Doctrine2 を使用することにしました。現時点で、エンティティ ワークフローの概念的な誤解が 1 つあります。
例によって最もよく説明されています:
try {
$user = $entityManager->find('User', 1);
$user->setName('New name');
$entityManager->flush();
}
catch (...)
{
// !we are here: changes failed and $user-row in DB was not updated
}
// ...
$user = $entityManager->find('User', 1);
$user->setOther('Other');
$entityManager->flush(); // <- in this request both [other] and [name] fields will be updated to DB, but only [other] update expected
最初のコード ブロックで、$user オブジェクトをフェッチしました。[名前] を変更して保存しようとしましたが、失敗しました。2 番目のブロック (最初のブロックとは無関係) で、$user オブジェクトを再度フェッチしました。しかし、ORM は最初と同じオブジェクトへのリンクを返しました。したがって、このオブジェクトはすでに [name] プロパティを変更しています。2 番目のブロックの最後の行で、[other] フィールドだけを保存したかったのですが、[other] と [name] の両方が更新されます。
この状況を解決する正しい方法は何ですか?