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