Bonjour,

Avec Doctrine (sous symfony) je souhaite faire une jointure via un champ commun sur 2 tables pour lesquelles il n'y a pas de foreign key. Mais j'ai des soucis.

Erreur de doctrine
"Unknown relation alias sfGuardUserGroup"

Schéma de ma BDD (en YML)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
Personnel:
  columns:
    login:                 { type: string(6), primary: true   }
    id_sf_guard_user:      { type: integer(4) }
    id_equipe:             { type: string(3), fixed: true }
    nom:                   { type: string(20), notnull: true  }
    prenom:                { type: string(20), notnull: true  }
  relations:
    EquipePersonnel:            { class: Equipe, local: id_equipe, foreign: id_equipe, onUpdate: CASCADE, onDelete: CASCADE }
    sfGuardUser:                { class: sfGuardUser, local: id_sf_guard_user, foreign: id,  onUpdate: CASCADE, onDelete: CASCADE }
 
Equipe:
  columns:
    id_equipe:             { type: string(3), fixed: true, primary: true }
    id_groupe_cpa:          { type: integer(4) }
   relations:
     GroupeCPA:             { class: sfGuardGroup, local: id_groupe_cpa, foreign: id,  onUpdate: CASCADE, onDelete: CASCADE }
 
sfGuardGroup:
  columns:
    id:           { type: integer(4), primary: true, autoincrement: true }
    name:         { type: string(255), unique: true }
  relations:
    users:        { class: sfGuardUser,  refClass: sfGuardUserGroup,  local: group_id,      foreign: user_id, foreignAlias: Groups }
 
sfGuardUser:
  columns:
    id:                 { type: integer(4), primary: true, autoincrement: true }
    username:           { type: string(128), notnull: true, unique: true }
  relations:
    groups:             { class: sfGuardGroup, local: user_id, foreign: group_id, refClass: sfGuardUserGroup, foreignAlias: Users }
 
sfGuardUserGroup:
  columns:
    user_id:           { type: integer(4), primary: true }
    group_id:          { type: integer(4), primary: true }
  relations:
    sfGuardUser:       { local: user_id, onDelete: CASCADE }
    sfGuardGroup:      { local: group_id, onDelete: CASCADE }
Ma Requête de jointure (dotrine)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
$q = Doctrine_Query::create()
	->from('Personnel p')
	->innerJoin('p.sfGuardUserGroup s 
		ON p.id_sf_guard_user = s.user_id')
	->where('s.group_id = ?', $this->getIdGroupeCpa())
	->orderBy('pers.login ASC');
Ma requête sous PostgreSQL (qui affiche très bien le résultat voulu)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT *
FROM personnel pers
INNER Join sf_guard_user_group s
ON pers.id_sf_guard_user = s.user_id
where s.group_id = 2
Questions : est-il possible de faire des jointures avec des champs qui n'ont pas de relations FK ? Que pourrait être mon erreur ? Comment pourrais je faire ce que je souhaite ?

Merci de m'aider

Ophélie