Как отменить невыполненные изменения объекта в Doctrine 2?

Я долгое время использовал уровень доступа к базе данных на основе SQL-запросов. Но сейчас я решил использовать ORM Doctrine2. На данный момент у меня есть одно концептуальное непонимание рабочего процесса сущностей.

Лучше всего описать на примере:

 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. Изменил [имя] и попытался сохранить, но не удалось. Во втором блоке (не связанном с первым) я снова получил объект $user. Но ORM вернул ссылку на тот же объект, что и в первый раз. Итак, этот объект уже изменил свойство [имя]. В последней строке второго блока я хотел сохранить только поле [другое], но и [другое], и [имя] будут обновлены.

Как правильно разрешить эту ситуацию?

9
задан timdev 25 May 2012 в 19:25
поделиться