Bonjour à tous !

J'essaie désespérément de créer une requête en DQL sous Doctrine 1.2 qui utilise des jointures imbriquées. La situation est simple : je pars d'une table userprofile qui est liée à une table city (via un city_id), qui est elle même liée à une table country (via un country_id).

J'ai bien créé mes relations dans mon schema dont voici un extrait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Userprofile:
  relations:
    City: { local: city_id, foreign: id, class: City }
 
City:
  relations : 
    Country: { local: country_id, foreign: id, class: Country }
Pour prendre un exemple, j'essaie de créer une requête qui permet d'obtenir le nom de l'utilisateur, ainsi que le nom de sa ville et de son pays.

Voici les requêtes essayées qui ne fonctionnent pas :

Requête 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
     $q = Doctrine_Query::create()
            ->select('p.id, p.username, c.name, co.name')
            ->from('Userprofile p, City c')
            ->innerJoin('c.Country co)'
             ->where('p.city_id = c.id')
Requête 2 (celle-ci, je comprends pourquoi elle ne fonctionne pas) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
     $q = Doctrine_Query::create()
            ->select('p.id, p.username, c.name, co.name')
            ->from('Userprofile p')
            ->innerJoin('p.City c)'
            ->innerJoin('c.Country co)'

Requête 3 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
     $q = Doctrine_Query::create()
            ->select('p.id, p.username, c.name, co.name')
            ->from('Userprofile p Inner Join p.City c')
            ->innerJoin('c.Country co)'
J'ai fait pas mal d'autres tests de requêtes mais j'aboutis toujours à la même erreur qui est :
Couldn't find class co
Bref, je vais faire comme d'habitude, la remplacer par une requête SQL qui fonctionnera correctement et qui me prendra 3 minutes à écrire. Mais l'objectif était d'utiliser le DQL, histoire de coder plus "proprement" mais visiblement ça ne paye pas toujours

Merci pour votre aide !

Nino