Jointure entre deux table en POO
Salut
Je voudrais afficher le résultat d'une jointure entre la table categories et table sous-categories mais j'ai pas réussi , voici le code
SousCategorie.Class.php
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 76 77 78 79 80 81 82 83
| <?php
class SousCategorie
{
protected $_id ;
protected $_nom ;
protected $_descr ;
protected $_idCat ;
// Un tableau de données doit être passé à la fonction (d'où le préfixe « array »).
public function __construct(array $donnees)
{
$this->hydrate($donnees);
}
// hydrate prend les valeurs des setters pas les getters
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 appelle le setter.
$this->$method($value);
}
}
}
// Les getters
public function id()
{
return $this->_id ;
}
public function nom()
{
return $this->_nom ;
}
public function descr()
{
return $this->_descr ;
}
public function idCat()
{
return $this->_idCat ;
}
//Les setters
public function setIdSousCat($id)
{
$this->_id = (int) $id ;
}
public function setNomSousCat($nom)
{
if (is_string($nom) && strlen($nom) <= 30)
{
$this->_nom = $nom ;
}
}
public function setDescrSousCat($descr) // id de sous-catégorie
{
if (is_string($descr) && strlen($descr) <= 200)
{
$this->_descr = $descr ;
}
}
public function setIdCat($idCat) // Id de catégorie
{
$this->_idCat = (int) $idCat ;
}
}
?> |
SousCategorieManager.Class.php
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
| <?php
class SousCategorieManager
{
private $_db; // Instance de PDO
public function __construct($db)
{
$this->setDb($db);
}
public function setDb(PDO $db)
{
$this->_db = $db;
}
//fonction getList tous le table
public function getList()
{
$sousCategories = array();
$q = $this->_db->prepare('SELECT *
FROM souscategories s
LEFT JOIN categories c on s.idCat = c.idCat
ORDER BY s.idSousCat');
$q->execute();
while ($donnees = $q->fetch(PDO::FETCH_ASSOC))
{
$sousCategories[] = new SousCategorie($donnees);
}
return $sousCategories;
}
}
?> |
Affichage
sous-categorie.php
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
| <?php
session_start();
include("../redirection.php");
// On enregistre notre autoload.
function chargerClasse($classname)
{
require ('../classes/'.$classname.'.Class.php');
}
spl_autoload_register('chargerClasse') ;
include('../db.php') ;
$managerObject = new SousCategorieManager($db);
$sousCategories = $managerObject->getList();
?>
<table cellpadding="0" cellspacing="0" border="0" class="stdtable stdtablequick stdtablecb">
<thead>
<tr>
<th class="head0">ID</th>
<th class="head1">Nom</th>
<th class="head0">Déscription</th>
<th class="head1">Catégorie</th>
<th class="head0" style="text-align:center">Modifier</th>
<th class="head1" style="text-align:center">Supprimer</th>
</tr>
</thead>
<?php
foreach ($sousCategories as $unSousCat)
echo '
<tr>
<td>',$unSousCat->id(),'</td>
<td>',htmlspecialchars($unSousCat->nom()),'</td>
<td>',htmlspecialchars($unSousCat->descr()),'</td>
<td>le nom de catégorie</td>
<td class="center">
<a href="./edit.php?id=',$unSousCat->id(),'" class="toggle"><img src="../images/edit.png" width=18" /></a></td>
<td class="center">
<a href="./delete.php?id=',$unSousCat->id(),'" class=""><img src="../images/trash.png" /></a></td>
</tr>';
?>
</tbody>
</table> |
Je voudrais afficher le nom de categorie dans la page sous-catégorie sachant que j'ai crée aussi des Class pour le categorie, pouvez-vous m'aider s'il vous plait ?
Merci d'avance