Récupération de données, conception
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:
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:
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:
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 ...