DDC-2839: [GH-869] Detach objects in original object data #3545

Closed
opened 2026-01-22 14:21:58 +01:00 by admin · 2 comments
Owner

Originally created by @doctrinebot on GitHub (Dec 4, 2013).

Originally assigned to: @Ocramius on GitHub.

Jira issue originally created by user @doctrinebot:

This issue is created automatically through a Github pull request on behalf of tomphp:

Url: https://github.com/doctrine/doctrine2/pull/869

Message:

The PR makes Doctrine ORM update the database when you execute something like this:

// MyEntity.php

/****
 * @Entity
 */
class MyEntity
{
    // ...

    /****
     * @Column(type="datetime")
     */
     private $created;

    // ...

    public function setCreated(\DateTime $created)
    {
        $this->created = $created;
    }

    public function getCreated()
    {
        return $this->created;
    }

    // ...
}
// Current problem

$entity = $entityManager->find('MyEntity', 1);

$entity->getCreated()->setDate('2001-01-01');

$entityManager->persist($entity);

$entityManager->flush();

// At this point no changes have been made to the database!

The reason this doesn't work currently is because the array of original data stored in the UnitOfWork contains the actual DateTime object which is in the entity. When you update the object in the entity the original data is updated also so the entity are the original value are still equal and therefore the object is not seen as changed.

I have chosen to clone all objects rather than just DateTime object include more types are included in the future.

Originally created by @doctrinebot on GitHub (Dec 4, 2013). Originally assigned to: @Ocramius on GitHub. Jira issue originally created by user @doctrinebot: This issue is created automatically through a Github pull request on behalf of tomphp: Url: https://github.com/doctrine/doctrine2/pull/869 Message: The PR makes Doctrine ORM update the database when you execute something like this: ``` php // MyEntity.php /**** * @Entity */ class MyEntity { // ... /**** * @Column(type="datetime") */ private $created; // ... public function setCreated(\DateTime $created) { $this->created = $created; } public function getCreated() { return $this->created; } // ... } ``` ``` php // Current problem $entity = $entityManager->find('MyEntity', 1); $entity->getCreated()->setDate('2001-01-01'); $entityManager->persist($entity); $entityManager->flush(); // At this point no changes have been made to the database! ``` The reason this doesn't work currently is because the array of original data stored in the UnitOfWork contains the actual DateTime object which is in the entity. When you update the object in the entity the original data is updated also so the entity are the original value are still equal and therefore the object is not seen as changed. I have chosen to clone all objects rather than just DateTime object include more types are included in the future.
admin added the Bug label 2026-01-22 14:21:58 +01:00
admin closed this issue 2026-01-22 14:22:00 +01:00
Author
Owner

@doctrinebot commented on GitHub (Dec 5, 2013):

Comment created by @doctrinebot:

A related Github Pull-Request [GH-869] was closed:
https://github.com/doctrine/doctrine2/pull/869

@doctrinebot commented on GitHub (Dec 5, 2013): Comment created by @doctrinebot: A related Github Pull-Request [GH-869] was closed: https://github.com/doctrine/doctrine2/pull/869
Author
Owner

@doctrinebot commented on GitHub (Aug 18, 2014):

Issue was closed with resolution "Invalid"

@doctrinebot commented on GitHub (Aug 18, 2014): Issue was closed with resolution "Invalid"
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: doctrine/archived-orm#3545