Bonjour,

Je suis novice en Php et en POO et je dois créer une requête qui retourne des informations sur une parcelle dont la géométrie est stockée dans une table PostGreSQL, selon qu'elle fasse partie de telle ou telle zone d'un PLU (infos et géométrie stockées dans une autre table), recoupe telle prescription ou non (infos et géométrie stockées dans d'autres tables selon le type de géométrie), ...
J'arrive au résultat escompté, mais je pense qu'il y a possibilité de faire mieux niveau code.
Quelles optimisations pourraient être faites ?
J'ai essayé l'hydratation de mes objets mais sans succès

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function getContrainte(){
 
	$database = new Database();
	$db = $database->getConnection();
 
	$id = '************';
 
	$contraintes = array();
 
	$plu = $db->query("SELECT DISTINCT plu.typezone,plu.libelle,plu.libelong FROM plu.zones_plu AS plu  
	JOIN  plu.parcelle AS parcelle ON ST_Intersects(ST_BUFFER(plu.geom,-1), parcelle.geom) GROUP BY plu.typezone,plu.libelle,plu.libelong,parcelle.label HAVING parcelle.label = '" . $id . "' ");
 
	while($donnees = $plu->fetch(PDO::FETCH_ASSOC)){
		$contrainte = new RestContrainte($donnees);
		$contrainte->groupe = 'zonage';
		$contrainte->ssgroupe = $donnees['typezone'];
		$contrainte->libelle = $donnees['libelle'];
		$contrainte->texte = $donnees['libelong'];
	array_push($contraintes,$contrainte);
	}
 
	$pscsurf = $db->query("SELECT DISTINCT pscsurf.libelle,pscsurf.typepsc,pscsurf.txt FROM plu.psc_surf AS pscsurf 
	JOIN plu.parcelle AS parcelle ON ST_Intersects(pscsurf.geom, parcelle.geom) GROUP BY pscsurf.libelle,pscsurf.typepsc,pscsurf.txt,parcelle.label HAVING parcelle.label = '" . $id . "' ");
 
	$psclin = $db->query("SELECT DISTINCT psclin.libelle,psclin.typepsc,psclin.txt FROM plu.psc_lin AS psclin
	JOIN plu.parcelle AS parcelle ON ST_Intersects(psclin.geom, parcelle.geom) GROUP BY psclin.libelle,psclin.typepsc,psclin.txt,parcelle.label HAVING parcelle.label = '" . $id . "' ");
 
	$pscpct = $db->query("SELECT DISTINCT pscpct.libelle,pscpct.typepsc,pscpct.txt FROM plu.psc_pct AS pscpct
	JOIN plu.parcelle AS parcelle ON ST_Intersects(pscpct.geom, parcelle.geom) GROUP BY pscpct.libelle,pscpct.typepsc,pscpct.txt,parcelle.label HAVING parcelle.label = '" . $id . "' ");
 
	while($donnees = $pscsurf->fetch(PDO::FETCH_ASSOC)){
		$contrainte = new RestContrainte($donnees);
		$contrainte->groupe = 'prescription';
		$contrainte->ssgroupe = $donnees['typepsc'];
		$contrainte->libelle = $donnees['libelle'];
		$contrainte->texte = $donnees['txt'];
	array_push($contraintes,$contrainte);
	}
 
	while($donnees = $psclin->fetch(PDO::FETCH_ASSOC)){
		$contrainte = new RestContrainte($donnees);
		$contrainte->groupe = 'prescription';
		$contrainte->ssgroupe = $donnees['typepsc'];
		$contrainte->libelle = $donnees['libelle'];
		$contrainte->texte = $donnees['txt'];
	array_push($contraintes,$contrainte);
	}
 
	while($donnees = $pscpct->fetch(PDO::FETCH_ASSOC)){
		$contrainte = new RestContrainte($donnees);
		$contrainte->groupe = 'prescription';
		$contrainte->ssgroupe = $donnees['typepsc'];
		$contrainte->libelle = $donnees['libelle'];
		$contrainte->texte = $donnees['txt'];
	array_push($contraintes,$contrainte);
	}
        return $contraintes;
	}
et ma classe RestContrainte()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class RestContrainte {
 
	public $groupe;
	public $ssgroupe;
	public $libelle;
	public $texte;
 
	public function __construct() {
		$this->groupe = null;
		$this->ssgroupe = null;
		$this->libelle = null;
		$this->texte = null;
	}
}