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.

8 réponses


Xen0risDEV
Réponse acceptée

Il vous faudra des jointure pour cela

Bonjour, tu aimerais ajouter un Controller dans un Controller ?

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

De rien :)

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);

        }

Merci à vous aussi :)