Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-688

Original Entity Data gets overridden by the change set

    Details

    • Type: Improvement Improvement
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 2.0-BETA2
    • Fix Version/s: None
    • Component/s: ORM
    • Security Level: All
    • Labels:
      None
    • Environment:
      Mac OS X 10.6; PHP 5.3.2; MySQL 5.1.44

      Description

      When changing data in an entity, the UnitOfWork will call computeChangeSet on a flush event. If there is a changeset, the original data ($this->_originalEntityData) gets overridden by the new data. However, the _originalEntityData should hold the original data, that was present at the time the entity was reconstituted from the database. This does no longer hold now.

      I think this can simply be fixed by commenting this line, however I do not know of any consequences this may bring with it:

      $this->_originalEntityData[$oid] = $actualData; (in computeChangeSet, after if( $changeSet ));

      Anyway, I ran into this problem while trying to retrieve the original data at the onFlush event of an update.

        Activity

        Hide
        Benjamin Eberlei added a comment -

        Changed into possible improvement for the future

        Show
        Benjamin Eberlei added a comment - Changed into possible improvement for the future
        Hide
        Benjamin Eberlei added a comment - - edited

        You can hold a map of them yourself if your listener also implements the "postLoad" event:

        $entity = $args->getentity();
        $this->originalData[spl_object_hash($entity)] = $args->getEntityManager()->getUnitOfWork()->getOriginalData($entity);
        
        Show
        Benjamin Eberlei added a comment - - edited You can hold a map of them yourself if your listener also implements the "postLoad" event: $entity = $args->getentity(); $ this ->originalData[spl_object_hash($entity)] = $args->getEntityManager()->getUnitOfWork()->getOriginalData($entity);
        Hide
        Jasper Kuperus added a comment -

        Does this mean that it is currently impossible to implement a Versionable mechanism using snapshots?

        Show
        Jasper Kuperus added a comment - Does this mean that it is currently impossible to implement a Versionable mechanism using snapshots?
        Hide
        Roman S. Borschel added a comment -

        This is actually currently expected. You can not get access to the original data in the onFlush event right now. I'm not saying that this will never be possible but it is simply the way it works at the moment.

        Show
        Roman S. Borschel added a comment - This is actually currently expected. You can not get access to the original data in the onFlush event right now. I'm not saying that this will never be possible but it is simply the way it works at the moment.

          People

          • Assignee:
            Roman S. Borschel
            Reporter:
            Jasper Kuperus
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated: