The second DQL query is invalid, as you are fetch-joining and hydrating a
subset of the actual association.

That is a logical mistake, and doctrine can't detect it nor can support it.

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/


On 4 August 2014 10:32, naitsirch <[email protected]> wrote:

> Some days ago I faced an issue with the filtering of child entities. I'll
> give you an example for easier understanding.
> We have two entities
>
> |-----------|      |-----------------------------|
> | Customer  |      | Project                     |
> |----|------|      |------|-------------|--------|
> | id | name |      | name | customer_id | status |
> |----|------|      |------|-------------|--------|
> | 1  | A    |      | P1   | 1           | 1      |
> |----|------|      | P2   | 1           | 1      |
>                    | P3   | 1           | 2      |
>                    | P4   | 1           | 3      |
>                    |------|-------------|--------|
>
> $dql1 = 'SELECT customer, project
>          FROM Customer customer
>          JOIN Project project
>          WHERE customer.id = 1';
>
> $dql2 = 'SELECT customer, project F
>          ROM Customer customer
>          JOIN Project project
>          WHERE customer.id = 1
>          AND project.status = 1';
>
> Now if you execute both of the above queries, you will get the customer
> 'A' with all its projects. The second condition of $dql2 is leveraged,
> because Doctrine will return the same customer Object as in the first query
> holding the four projects. I am sure that this is a known issue and maybe
> you would think that possible solutions are to clear the entity manager,
> but this will detach all entities loaded before.
>
> Is there any other working solution ('REFRESH' hint could lead to
> dangerous side effects, so this is no solution)?
>
> I think Doctrine will have to care about the constitions when storing and
> fetching entities from the cache, but this is not trivial I think.
>
> What do you think?
>
> --
> You received this message because you are subscribed to the Google Groups
> "doctrine-user" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/doctrine-user.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to