php POO question sur les class et requetes SQL
Bonjour,
Je me met à nouveau sur la POO (je fait mon come back j'avais déjà eu du mal la première fois) et je bloc à nouveau sur la même question que la première fois.
Je vous explique
Actuellement j'utilise des fonctions du style :
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
| <?php
// RECUPERATION DES INFOS DE TOUS LES UTILISATEURS
function GetAll_Uilisateur()
{
$LesValeurs=Array();
$i=0;
// ecriture de la requete
$RQT='SELECT u.ID_UTILISATEUR, CONCAT(u.PRENOM, " ", u.NOM) as NomPrenom, u.EMAIL,
s.NOM
FROM utilisateur u
INNER JOIN service s
ON u.ID_SERVICE= s.ID_SERVICE
ORDER BY PRENOM ASC
';
$Query = @mysql_query($RQT); // execution de la requete
// si la requète est correctement executée
if($Query)
{
while($Fetch = mysql_fetch_assoc($Query))
{
$LesValeurs[$i] = $Fetch;
$i++;
}
return $LesValeurs; // on retorune les valeurs
}
else { echo 'Erreur lors de l\'execution de la fonction GetAll_Uilisateur veuillez contacter le developpeur'; }
}
?> |
Ensuite pour afficher le contenu :
Dans mon CONTROLEUR je fait
Code:
1 2 3 4 5 6 7 8 9
| <?php
/******************** RECUPERATION DES VALEURS ************************/
// recuperation du nombre d'utilisateur
$Nb_Employe = count(GetAll_Utilisateur());
// recuperation des infos de tous les utilisateurs
$All_Utilisateur = GetAll_Utilisateur();
?> |
Et dans ma VUE
Code:
1 2 3 4 5 6 7 8
| <?php
for($i=0; $i<$Nb_Utilisateur; $i++)
{
echo $All_Utilisateur[$i]['NomPrenom'].'<br/>'; // Nom et prenom de l'utilisateur
echo $All_Utilisateur[$i]['EMAIL'].'<br/>'; // email de l'utilisateur
echo $All_Utilisateur[$i]['NOM'].'<br/>'; // Nom du service
}
?> |
Maintenant je me demande comment je doit faire pour mes class.
Dans son tuto sur la POO, Victor ne soulève pas la possibilité de récupère les données sur plusieurs tables.
Ma question est donc : Comment doit-je m'y prendre?
Est ce que je doit créer une class pour chaque table?
En POO, il y a une phrase très importante qu'il faut que vous ayez constamment en tête : « Une classe, un rôle. » Maintenant, répondez clairement à cette question : « Quel est le rôle d'une classe commePersonnage» ?
Un objet instanciant une classe comme Personnage a pour rôle de représenter une ligne présente en BDD. Le verbe « représenter » est ici très important. En effet, « représenter » est très différent de « gérer ». Une ligne de la BDD ne peut pas s'auto-gérer ! C'est comme si vous demandiez à un ouvrier ayant construit un produit de le commercialiser : l'ouvrier est tout à fait capable de le construire, c'est sonrôle, mais il ne s'occupe pas du tout de sa gestion, il en est incapable. Il faut donc qu'une deuxième personne intervienne, un commercial, qui va s'occuper de vendre ce produit.
Je n'ai pas compris à 100% ce que voulais dire victor dans le paragraphe ci-dessus mais je pense que cela repond à ma question avec un grand NON.
Maintenant si je créé une class Utilisateur :
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
| <?php
class Utilisateur
{
// LISTE DES ATTRIBUTS
private $_id_utilisateur;
private $_nom;
private $_prenom;
private $_email;
public function __construct($donnees)
{
$this -> hydrate($donnees);
}
public function hydrate(array $donnees)
{
foreach($donnees as $key => $value)
{
//On récupère le nom du setter correspondant à l'attribut
$method = 'set'.ucfirst($key);
//Si le setter correspondant existe
if(method_exists($this, $method))
{
//On appel le setter
$this -> $method($value);
}
}
}
?> |
et une class UtilisateurManager comme ceci
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
| <?php
class UtilisateurManager
{
private $_db; //insctance de pdo
public function __construct($db)
{
$this -> setDb($db);
}
public function getAll()
{
$Query = $this -> _db -> query(' SELECT u.ID_UTILISATEUR, CONCAT(u.PRENOM, " ", u.NOM) as NomPrenom, u.EMAIL,
s.NOM
FROM utilisateur u
INNER JOIN service s
ON u.ID_SERVICE= s.ID_SERVICE
ORDER BY PRENOM ASC
);
while($donnees = $Query ->fetch(PDO::FETCH_ASSOC))
{
$utilisateurs[] = new Utilisateur($donnees);
}
return $utilisateurs;
}
}
?> |
Il est impossible de récupérer le nom du service de la table service.
voilà ce que je ne comprend pas :(
Dans ce cas comment je doit créer mes class si je me base sur la manière dont je créé mes fonctions actuellement (comme je vous ai montré au début.)