Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Critical
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: 2.0-ALPHA4
-
Component/s: Mapping Drivers
-
Security Level: All
-
Labels:None
Description
When Lifecycle Events are invoked on entity update (@PreUpdate), the entity is not updated properly in the database.
This code creates a User object, sets its name to "Bob" and its value to empty, then updates the object and updates the name to "Alice".
$user = new User;
$user->setName('Bob');
$user->setValue('');
$em->persist($user);
$em->flush();
$user->setName('Alice');
$em->flush();
However, when the User class has a @PreUpdate event that e.g. sets the value to "Hello World", the name change gets lost and only the value is updated by the second flush() call.
This is a critical bug which prevents creation of entities that simulate the "Timestampable" behaviour of Doctrine 1.x...
I think this might be a hen-egg problem.
@PreUpdate is only invoked after it is calculated that a change occured on all those entities that have updates. After a change in @PreUpdate events there would have to be another calculation of changes on all those entities, which would probably mean a significant performance hit.