@Marco I think so, what's the standard procedure to it?

Il giorno venerdì 5 dicembre 2014 11:31:18 UTC+1, Marco Pivetta ha scritto:
>
> This looks like a bug to me.
>
> We'd probably need to fix the DQL and/or metadata API to have the 
> subclasses stored in parent class metadata, or have all discriminator 
> mappings checked (and the inheritance re-constructed from there) in the 
> SQLWalker.
>
> @Stefano can you come up with a failing test case?
>
>
> Marco Pivetta 
>
> http://twitter.com/Ocramius      
>
> http://ocramius.github.com/
>
> On 5 December 2014 at 11:26, Stefano Angaran <[email protected] 
> <javascript:>> wrote:
>
>> I was looking at Doctrine SQLWalker code and that was my conclusion too.
>>
>> I think I will refactor my query code then. If I change the FROM clause 
>> to look for B items I can make it work without using instance of operator.
>>
>> My suggestion is also to better clarify this in the INSTANCE OF operator 
>> documentation stating that it should be used only to search for leaf 
>> entities, what you think?
>>
>> Il giorno venerdì 5 dicembre 2014 11:22:50 UTC+1, Jàπ (Jasper N. Brouwer) 
>> ha scritto:
>>>
>>> I think I misjudged how Doctine handles these filters :( 
>>>
>>> It seems that when filtering on "instanceof B", it will produce a query 
>>> that will search for a row with `type = B`. Because B is in fact an 
>>> abstract class, it will never exist in the db, so the query will indeed 
>>> return an empty result set. 
>>>
>>> Seeing this in action, I think this is intended behavior, and your 
>>> use-case is unfortunately not supported. 
>>>
>>> If it would be supported, it would mean that Doctrine would have to 
>>> figure out the inheritance graph beforehand, then create a query that will 
>>> check not only `type = B`, but every child of B as well. That would impact 
>>> performance, which is my guess as to why this isn't supported. 
>>>
>>> I'm afraid the only solution right now is to filter on "instanceof D or 
>>> instanceof E". 
>>>
>>> PS: If your inheritance graph will get larger, it will pay of to use 
>>> composition (together with associations) in stead of inheritance. 
>>>
>>> --   
>>> Jasper N. Brouwer 
>>> (@jaspernbrouwer) 
>>>
>>>
>>> On 5 December 2014 at 10:41:15, Stefano Angaran ([email protected]) 
>>> wrote: 
>>> > Here it is. I've made some edit to reduce attributes number but the 
>>> > structure is intact 
>>> >   
>>> > SELECT p0_.id AS id0, p0_.name AS name1, c1_.attr AS attr6, f3_.sku AS 
>>> > sku7, c5_.foo AS foo8, c5_.bar AS bar9, p0_.type AS type12 FROM A p0_ 
>>> LEFT 
>>> > JOIN C c1_ ON p0_.id = c1_.id LEFT JOIN B f3_ ON p0_.id = f3_.id LEFT 
>>> JOIN 
>>> > D f4_ ON p0_.id = f4_.id WHERE p0_.type IN ('B') 
>>> >   
>>> > Only B is added in the WHERE expression. Am I doing something wrong or 
>>> is 
>>> > it how it's supposed to work? 
>>>
>>>
>>>  -- 
>> 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] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> 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