DDC-1054: Lazy loading problem #1645

Closed
doctrinebot opened this Issue Mar 2, 2011 · 7 comments

2 participants

@doctrinebot

Jira issue originally created by user vigor_bg:

I have a problem when using lazy loading in entity that was initialized before that through eager loading. I am attaching a file with my entities and the 2 queries that i make whit which i have the problem.

@doctrinebot

Comment created by vigor_bg:

There is a fix that i made to fix the problem, but i am not sure how it will reflect on the performance. But as far as i can see and understand the logic i don't see where else it could be.

in the class ObjectHydrator in privet function _initRelatedCollection
on line 164 you make a check if collection is set to be refreshed or it is fetched but not initialized.


else if (isset($this->*hints[Query::HINT*REFRESH]) ||
                isset($this->_hints['fetched'][$class->name][$fieldName]) &&
                ! $value->isInitialized()) {
            // Is already PersistentCollection, but either REFRESH or FETCH-JOIN and UNINITIALIZED!
            $value->setDirty(false);
            $value->setInitialized(true);
            $value->unwrap()->clear();
            $this->_initializedCollections[$oid . $fieldName] = $value;
        }

The problem that i see here is in the second part when the collection is not initialized and i think that is the reason for the problem so my solution si


else if (isset($this->*hints[Query::HINT*REFRESH]) ||
                isset($this->_hints['fetched'][$class->name][$fieldName]) &&
                ! $value->isInitialized()) {
            // Is already PersistentCollection, but either REFRESH or FETCH-JOIN and UNINITIALIZED!
            $value->setDirty(false);
       /****
            *  $value->setInitialized(true);
            *  $value->unwrap()->clear();
            * Fix by Victor on 02/03/2011
            * With only that code the collection doesn't get initialized
            */
            $value->initialize();
            $this->_initializedCollections[$oid . $fieldName] = $value;
        }
@doctrinebot

Comment created by @beberlei:

"I am having a problem".

Can you describe a little bit more what your problem actually is?

@doctrinebot

Comment created by vigor_bg:

well that is why i have attached the php file. Inside you can see my entities and the 2 queries whit which i have the problem. So in general when i call entity and use eager join to get related entity. And then call that related entity on it's own the lazy loading is not working.

@doctrinebot

Comment created by @beberlei:

In your use-case do you execute Q1 and then Q2 after each other in the same request? I just don't get why in your case a query with a Refresh Hint is executed.

The code is not very helpful as i cannot execute it out of the box. I would prefer a PHPUnit test-case with one of the Doctrine2 Test Models for such a complex issue.

@doctrinebot

Comment created by vigor_bg:

After i updated to the latest version the bug was fixed. So sorry for the bother. Looks like it was connected with the problem of ticket DDC-992.
Thanks for the great work :)

@doctrinebot

Issue was closed with resolution "Fixed"

@beberlei beberlei was assigned by doctrinebot Dec 6, 2015
@doctrinebot doctrinebot added this to the 2.0.4 milestone Dec 6, 2015
@doctrinebot doctrinebot closed this Dec 6, 2015
@doctrinebot doctrinebot added the Bug label Dec 7, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment