Bonjour à tous,
J'ai suivis les tutos sur la création d'un site Internet à l'aide d'un MVC.
Mais j'ai une question et j'ai du mal à trouver une réponse dans le code suite aux 7 jours de tutos.
Je veux ajouter des catégories à mes posts via une table différente mais rélié dans la table "posts" via "category_id".
Comment je peux afficher les noms des catégories depuis mon PostsController dans ma vue posts/index.php?
Dois-je obligatoirement utiliser les joitures en sql ou je peux joindre d'autre model aux autres ?
J'espère que vous m'avez compris et merci beaucoup pour vos réponses.
Bonjour à toi,
Ben je vois pas trop de solution pour pouvoir mettre plusieurs table dans 1 Controller.
A part les jointures en SQL je ne vois pas trop.
Par exemple : afficher des articles (ici mon controller principal) + leurs catégories + leur nombre de commentaires...
OK c'est que je pensais, je viens de finir mon model pour intégrer les jointures (si ça intéresse quelqu'un je partage).
Merci beaucoup
Si vous le souhaiter :
public function find($req = array()){
$sql = 'SELECT ';
if(isset($req'fields'])){
if(is_array($req'fields'])){
$sql .= implode(', ',$$req'fields']);
}else{
$sql .= $req'fields'];
}
}else{
$sql.='*';
}
$sql .= ' FROM '.$this->table.' as '.get_class($this).' ';
// Liaison
if(isset($req'join'])){
foreach($req'join'] as $k=>$v){
$sql .= 'LEFT JOIN '.$k.' ON '.$v.' ';
}
}
Voici mon model également, merci pour le partage !
public function find($req=array()){
$sql = 'SELECT ';
if(isset($req'fields'])){
if(is_array($req'fields'])){
$sql .= implode(', ',$$req'fields']);
}else{
$sql .= $req'fields'];
}
}else{
$sql.='*';
}
$sql .= ' FROM '.$this->table.' as '.get_class($this).' ';
// Liaison
if(isset($req'join'])){
foreach($req'join'] as $k=>$v){
$sql .= 'LEFT JOIN '.$k.' ON '.$v.' ';
}
}
if(isset($req'inner'])){
foreach($req'inner'] as $k=>$v){
$sql .= 'INNER JOIN ('.$v.') ';
}
}
// Construction de la condition
if(isset($req'conditions'])){
$sql .= 'WHERE ';
if(!is_array($req'conditions'])){
$sql .= $req'conditions'];
}else{
$cond = array();
$exectCond = array();
foreach($req'conditions'] as $k=>$v){
$cond] = "`$k`= :$k";
$exectCond$k] = $v;
}
$sql .= implode(' AND ',$cond);
}
}
if(isset($req'group'])){
$sql .= ' GROUP BY '.$req'group'];
}
if(isset($req'having'])&& !empty($req'having'])){
$sql .= ' HAVING '.$req'having'];
}
if(isset($req'order'])){
$sql .= ' ORDER BY '.$req'order'];
}
if(isset($req'limit'])){
$sql .= ' LIMIT '.$req'limit'];
}
$pre = $this->pdo->prepare($sql);
if(isset($exectCond) && !empty($exectCond)):
$pre->execute($exectCond);
else:
$pre->execute();
endif;
return $pre->fetchAll(PDO::FETCH_OBJ);
}