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.

Reply via email to