Bonjour,

Débutant avec symfony et Doctrine, je cherche à mettre en place une requête complexe, jusque ici sans succès. Pour le détail, la requête finale doit aller chercher, dans 3 schémas répartis sur 2 bases différentes, un bon nombre de champs. Mais le souci, c'est que déjà avec une première version sur deux schéma d'une même base, je suis incapable d'executer la requete correctement avec symfony et doctrine.

Voila la requete en SQL:
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
SELECT PROJET_SIGIP.IDPROJET,
  PROJET_SIGIP.IDORG, 
  PROJET_SIGIP.LIBPROJET, 
  PROJET_SIGIP.DESCRIPTION, 
  PROJET_SIGIP.ENJEUX, 
  PROJET_SIGIP.RISQUE, 
  PROJET_SIGIP.CRITICITE, 
  PROJET_SIGIP.POURCENTAGE_REALISE, 
  PROJET_SIGIP.RISQUES_CONTRAINTES, 
  PROJET_SIGIP.DTDEB, 
  PROJET_SIGIP.DTDEBREEL, 
  PROJET_SIGIP.DTFIN, 
  PROJET_SIGIP.DTFINREEL, 
  (SELECT TT.LIBELLE FROM gipsi.TABLE_TYPE TT, gipsi.TABLE_TYPE TT2 WHERE TT.NOMCOLONNE = 'TYPDOM' and TT.PARAM1 = 'SIGIP' and TT2.PARAM2 = TT.CODTYPE AND TT2.CODTYPE = PROJET_SIGIP.TYPPI) "dom",
  (SELECT TT.LIBELLE FROM gipsi.TABLE_TYPE TT WHERE NOMCOLONNE = 'TYPPI' and PARAM1 = 'SIGIP' and CODTYPE = PROJET_SIGIP.TYPPI)"ppi", 
  (SELECT S.NOM FROM gipsi.SERVICE S WHERE TYPSERV = 'SPHER' and IDORG = PROJET_SIGIP.IDORG and IDSERV = PROJET_SIGIP.TYPSPHERE)"sphere", 
  (SELECT TT.LIBELLE FROM gipsi.TABLE_TYPE TT WHERE NOMCOLONNE = 'TYPCIBLE' and PARAM1 = 'SIGIP' and CODTYPE = PROJET_SIGIP.TYPCIBLE)"typcible", 
  PROJET_SIGIP.OBSERVATIONS, 
  PROJET_SIGIP.MOTCLE,
  DATE_METEO.DTMETEO, 
  DATE_METEO.TYPMETEO, 
  TT.LIBELLE,
  DATE_METEO.OBS,
  DATE_METEO.MARQUANT
FROM PROJET_SIGIP PROJET_SIGIP, UTIL UTIL, DATE_METEO DATE_METEO, GIPSI.TABLE_TYPE TT
Where UTIL.USERNAME = 'user'
AND UTIL.TYPDOM = PROJET_SIGIP.TYPDOM
AND (UTIL.TYPPI = PROJET_SIGIP.TYPPI OR UTIL.TYPPI IS NULL)
AND DATE_METEO.IDPROJET = PROJET_SIGIP.IDPROJET
  and TT.NOMCOLONNE = 'TYPMETEO'
  and TT.PARAM1 = 'SIGIP'
  and TT.CODTYPE = DATE_METEO.TYPMETEO
  and (DATE_METEO.MARQUANT=1 or DATE_METEO.DTMETEO=(SELECT MAX(DTMETEO) FROM DATE_METEO WHERE IDPROJET = PROJET_SIGIP.IDPROJET))
J'ai bien essayé de faire un genre de :
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
$query=Doctrine_Query::create()
	-> select ('PROJET_SIGIP.IDPROJET',
  'PROJET_SIGIP.IDORG', 
  'PROJET_SIGIP.LIBPROJET', 
  'PROJET_SIGIP.DESCRIPTION', 
  'PROJET_SIGIP.ENJEUX', 
  'PROJET_SIGIP.RISQUE', 
  'PROJET_SIGIP.CRITICITE', 
  'PROJET_SIGIP.POURCENTAGE_REALISE', 
  'PROJET_SIGIP.RISQUES_CONTRAINTES', 
  'PROJET_SIGIP.DTDEB', 
  'PROJET_SIGIP.DTDEBREEL', 
  'PROJET_SIGIP.DTFIN', 
  'PROJET_SIGIP.DTFINREEL', 
  (Select ('TT.LIBELLE') ->from ('gipsi.TABLE_TYPE TT', 'gipsi.TABLE_TYPE TT2') ->where ('TT.NOMCOLONNE = ?','TYPDOM') ->andWhere ('TT.PARAM1 = ?','SIGIP') ->andWhere ('TT2.PARAM2 = ?','TT.CODTYPE') ->andWhere ('TT2.CODTYPE = ?','PROJET_SIGIP.TYPPI')),
  (select ('TT.LIBELLE') ->from ('gipsi.TABLE_TYPE TT') ->Where ('NOMCOLONNE = ?','TYPPI') ->andWhere ('PARAM1 = ?', 'SIGIP') ->andWhere ('CODTYPE = ?','PROJET_SIGIP.TYPPI')), 
  (select ('S.NOM') ->from ('gipsi.SERVICE S') ->Where ('TYPSERV = ?','SPHER') ->andWhere ('IDORG = ?','PROJET_SIGIP.IDORG') ->andWhere ('IDSERV = ?','PROJET_SIGIP.TYPSPHERE')), 
  (select ('TT.LIBELLE') ->from ('gipsi.TABLE_TYPE TT') ->where ('NOMCOLONNE = ?','TYPCIBLE') ->andWhere ('PARAM1 = ?','SIGIP') ->andWhere ('CODTYPE = ?','PROJET_SIGIP.TYPCIBLE')), 
  'PROJET_SIGIP.OBSERVATIONS', 
  'PROJET_SIGIP.MOTCLE',
  'DATE_METEO.DTMETEO', 
  'DATE_METEO.TYPMETEO', 
  'TT.LIBELLE',
  'DATE_METEO.OBS',
  'DATE_METEO.MARQUANT')
  ->from('PROJET_SIGIP PROJET_SIGIP', 'UTIL UTIL', 'DATE_METEO DATE_METEO', 'GIPSI.TABLE_TYPE TT')
  ->Where('UTIL.TYPDOM = ?','PROJET_SIGIP.TYPDOM')
  ->andWhere('UTIL.TYPPI = ?','PROJET_SIGIP.TYPPI') ->orWhere ('UTIL.TYPPI IS NULL')
  ->andWhere ('DATE_METEO.IDPROJET = ?','PROJET_SIGIP.IDPROJET')
  ->andWhere ('TT.NOMCOLONNE = ?','TYPMETEO')
  ->andWhere ('TT.PARAM1 = ?','SIGIP')
  ->andWhere ('TT.CODTYPE = ?','DATE_METEO.TYPMETEO')
  ->andWhere ('DATE_METEO.MARQUANT=?','1' or 'DATE_METEO.DTMETEO=?',(SELECT ('MAX(DTMETEO)') ->from ('DATE_METEO') ->Where ('IDPROJET = ?','PROJET_SIGIP.IDPROJET')));
 
  return $query->execute(array(),Doctrine_Core::HYDRATE_ARRAY);
Mais comme vous vous en doutez, ça ne fonctionne pas...

Pourriez vous m'aider?

d'avance merci,
Dash777