fix(autorefresh): don't use clone to get the id values #980
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixing this was trickier than expected 😅
Since we cannot get the id values of the entity from the clone, we need to collect them at a place where we have access to the real object.
The first guess was to call Configuration::instance()->persistence()->getIdentifierValues($object) in PersistedObjectsTracker::proxifyObjects(). But this was messing with the container, during the kernel.reset phase. The problem is more or less the same than explained in #963 - BTW, I've fixed this issue, and created the test mentioned there. PHPUnit is missing an event before the tear down methods are called, so I didn't have a clean solution with this idea.
Second guess: let's collect the ids when we add the objects to the PersistedObjectsTracker! Problem: this is made in a "post instantiate" hook, so the ids are not generated at this time.
Third guess would be to make it in a "post persist" hook. But the problem here is that we perform an additional flush() when a post persist hook is used, this will have a performance impact.
The last solution I had was to collect the id values after each PersistManager::save(). This solution is not very satisfactory because now, the PersistenceManager knows about the PersistedObjectsTracker, but it is the only solution I found.
fixes #976
fixes #963
fixes #979