Я долгое время использовал уровень доступа к базе данных на основе 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 вернул ссылку на тот же объект, что и в первый раз. Итак, этот объект уже изменил свойство [имя]. В последней строке второго блока я хотел сохранить только поле [другое], но и [другое], и [имя] будут обновлены.
Как правильно разрешить эту ситуацию?