No, I was more wondering why you are fiddling around with a query builder
*outside* a repository. Where are you manipulating the QueryBuilder? And
why?

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/


On 3 April 2014 21:09, Andres Lartigue Debian <[email protected]>wrote:

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

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