Thanks for your answer, Yes, that's why I'm sending $repository as a parameter. Actually $repository is an instance of the root class repository.
2014-04-03 18:40 GMT+02:00 Marco Pivetta <[email protected]>: > Hi Andres, > > Why would you want this logic to act out of the scope of a repository? > > Marco Pivetta > > http://twitter.com/Ocramius > > http://ocramius.github.com/ > > > On 3 April 2014 07:40, Andres Lartigue Debian > <[email protected]>wrote: > >> Hello, >> >> I'm writing a class that's able to add filters to a given query builder. >> >> I'm having a problem when I want to add a filter in a field that's not a >> part of the root class of the query, because I don't know the alias name of >> the related class. >> >> I've used query builder getDQLPart function to retrieve all query joins. >> This returns an array where I get the join alias, and the relation name, >> but it doesn't tell me the name of the related class. >> >> I think it's possible to get the name of the related class by reading >> Doctrine model information but I couldn't find a way to do this properly. >> >> The way I found is to rewrite a function that's in the >> Doctrine\ORM\EntityRepository class : getClassMetadata() >> >> This function is declared as protected, If I modify it to make it public, >> I'm able to achieve what I'm looking for. >> >> Of course, this is not a good solution, and my question is if there's >> another way to implement this functionnality. >> >> This is the code I'm using to write my function >> >> public static function getQueryAlias($qb, $attdef, $repository){ >> >> $relationName = ''; >> $classmetadata = $repository->getClassMetadata(); >> foreach ($classmetadata->getAssociationMappings() as $key => >> $relation){ >> //$attdef is an array with fields definitions I use to set up >> filters. $attdef['name'] matchs doctrine fieldname >> if($relation['fieldName'] == $attdef['name']){ >> $relationName = $key; >> } >> } >> >> if($relationName != ''){ >> foreach ($qb->getDQLPart('join') as $joins){ >> foreach($joins as $join){ >> $arr = explode('.', $join->getJoin( )); >> if($arr[1] == $relationName){ >> return $join->getAlias(); >> } >> } >> >> } >> } >> return false; >> } >> >> Thanks for your answers >> >> Andrés >> >> -- >> 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 a topic in the > Google Groups "doctrine-user" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/doctrine-user/wHHa4b-WBD0/unsubscribe. > To unsubscribe from this group and all its topics, 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. > -- Andrés Lartigue Debián Binova Services Informatiques <http://www.binova-it.fr/> Parc Technologique des rives de l'Oise Rue les rives de l'Oise BP 50149 60201 Compiègne Cédex +33 (0)3.44.90.79.60 +33 (0)6.24.84.03.30 <http://www.club-des-entrepreneurs.fr/> -- 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.
