Bonjour à tous,

j'essaye de me faire une petite appli pour apprendre la POO en PHP mais je fais face a un problème de conception.
Mon programme sert a gérer des seances de musculation.
sur ma BD j'ai 3 tables: Seance, Série et Exercice.
En PHP j'ai égaelment 3 classes du même nom ainsi que 3 classes Manager (modèle)

Ma question concerne la récupération complète d'une séance. donc la liste des series et exercices effectués
Ma première idée était de faire la requete avec les jointures dans la classe ManagerSeance de cette sorte
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT s.*, e.*, se.* FROM seance s INNER JOIN serie se ON se.idSeance = s.id INNER JOIN exercice e ON e.id = se.idExercice
Cette solution marche mais n'est pas très POO puisque cela m'oblige a créer des attributs de serie et exercice dans la classe séance ...

Exemple avec mes classes serie et ManagerSerie. Ma classe série se retrouve avec des attributs d'exercices...
Classe serie
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
class serie{
	private $_id;
	private $_idExercice;
	private $_nom; // nom de l'exercice
	private $_idSeance;
	private $_rep;
	private $_charge;
 
	function __construct(array $donnees){
		/*$this->_id = 1;
		$this->_idExercice = 1;
		$this->_idSeance = 1;
		$this->_reps = 10;
		$this->_charge = 100;*/
		$this->hydrate($donnees);
	}
	public function getIdExercice(){
		return $this->_idExercice;
	}
	public function setIdExercice($idExercice){
		$this->_idExercice = (int) $idExercice;
	}
	public function getNom(){
		return $this->_exercice;
	}
	public function setNom($exercice){
		if (is_string($exercice) && strlen($exercice) <= 30)
	    {
	      $this->_nom = $exercice;
	    }
	}
 
	public function getIdSeance(){
		return $this->_idSeance;
	}
	public function setIdSeance($idSeance){
		$this->_idSeance = (int) $idSeance;
	}
 
	public function getRep(){
		return $this->_rep;
	}
	public function setRep($rep){
		$this->_rep = (int)$rep;
	}
 
 
	public function getCharge(){
		return $this->_charge;
	}
	public function setCharge($charge){
		$this->_charge = (int)$charge;
	}
 
	public function addSerie(Serie $serie/*$exo,$rep,$poids*/){
		//$this->_series[count($this->_series)] = ['exo'=>$exo,
		//				'rep'=>$rep,
		//				'poids'=>$poids];
 
	}
 
	#Initialisation d'un objet
	public function hydrate (array $donnée){
		foreach ($donnée as $key => $value){
			$method = 'set'.ucfirst($key); #première lettre en majuscule
 
			if (method_exists($this, $method)){
				$this->$method($value);
			}
		}
	}	
 
}
?>
Classe serieManager
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
<?php
class serieManager{
	private $_db;
 
 
	function __construct($db){
		$this->setDB($db);
	}
	public function setDB(PDO $db){
		$this->_db = $db;
	}
 
	public function addSerie(Serie $serie){
		var_dump($series);
 
		try{
			$req = $this->_db->prepare('INSERT INTO serie(idExercice, idSeance,charge,rep) VALUES(:idExercice, :idSeance, :charge, :rep)');
			$req->bindValue(':idExercice',$serie->getIdExercice(),PDO::PARAM_INT);
			$req->bindValue(':idSeance',$serie->getIdSeance(),PDO::PARAM_INT);
			$req->bindValue(':charge',$serie->getCharge(),PDO::PARAM_INT);
			$req->bindValue(':rep',$serie->getReps(),PDO::PARAM_INT);
 
			$req->execute();
		}catch(PDOException $e){
			$log = fopen('serie.log','r+');
			fputs($log, $e);
			fclose($log);
		}
	}
 
	//Retourne une seule série
	public function getSerie($id){
		$req = $this->_db->query('SELECT * FROM serie WHERE id = '.$id);
		$donnee = $req->fetch(PDO::FETCH_ASSOC);
		var_dump($donnee);
 
		return new serie($donnee);
	}
 
	public function getListSerie(){
		$req = $this->_db->query('SELECT s.*, e.* FROM serie s INNER JOIN exercice e ON s.idExercice = e.id ');
 
		while($donnee = $req->fetch(PDO::FETCH_ASSOC)){
			$series = new serie($donnee);
		}
 
		return $series;
	}
 
}
 
 
?>
Quel est donc la meilleure façon de procéder ?

Merci d'avance, je ne sais pas si je suis très claire ...