@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.
