Blogdevphp

Codeigniter: Requêtes sql avec Active Record

2013-12-02 codeigniter

Vous avez la possibilité de faire vos requêtes avec la classe Active Record. Tout va se passer dans ce répertoire application/models/. Active Record est un design pattern permettant la gestion du contenu de sa base de données. Codeigniter, utilise une version modifiée, de ce design pattern, se caractérisant par sa facilité d'utilisation. Fini les longues requêtes, place aux fonctions d'insertion, de modification et de supression façon Active Record.

Mise en route

Afin de configurer, l'accès à la base de données, on devra saisir nos infos dans le fichier database.php situé dans application/config.

Nous allons créer un fichier utilisateur_model et notre table s'intitule 'utilisateur'. Votre classe, devra hériter de la classe de base CI_Model :

<?php
  class Utilisateur_model extends CI_Model {
  
    protected $table = 'utilisateur';
  }
?>

Notre table utilisateur contient les champs :

  • id_user

  • login

  • mot_de_passe

  • nombre_connexions

  • score

  • avatar

  • age

  • id_jeu

Fonctions de type Select

Commençons par récupérer tous nos utilisateurs :

<?php
  $this->db->get($this->table); 
?>

Maintenant, si nous voulons récupérer, uniquement, les colonnes login et mot_de_passe :

<?php
  $this->db->select('login, mot_de_passe')
           ->get($this->table);
?>

Qu'en est-il des fonctions d'agrégation de type select COUNT, select MAX ou encore select AVG... :

<?php

  $this->db->count_all($this->table); 

  $this->db->select_sum('score')
           ->get($this->table);

  $this->db->select_min('score')
           ->get($this->table);
  // idem pour $this->db->select_max();


  $this->db->select_avg('score')
        ->get($this->table); 
?>

Dans certains cas, on utilise un alias pour renommer la colonne comme 'as' par exemple. Pour cela, on saisit un deuxième paramètre :

<?php
  $this->db->select_avg('age','age_moyen')
           ->get($this->table);
?>

Fonctions de type Insert

Pour insérer nos données, on procède de cette manière :

<?php
  $data = array(
            'score' => $score,
            'avatar' => $avatar,
               );
           
  $this->db->insert($this->table,$data);
?>

Fonction de type Update

Souvent associée à la clause where, elle permet de mettre à jour la ligne d'une table :

<?php

  $data = array(
            'score' => $score,
            'avatar' => $avatar,
            );
           
  $this->db->where('id_user', $id)
           ->update($this->table,$data);
?>

Fonctions de type Delete

Comme Update, on l'utilise souvent avec where :

<?php

  $this->db->where('id_user',$id)
           ->delete($this->table);
?>

Affichage des résultats

La question, maintenant, est de savoir comment afficher, dans une vue, les résultats. Pour commencer, on va déclarer notre modèle, dans le fichier application/config/autoload.php :

<?php

  /***/
$autoload['model'] = array('utilisateur_model');
?>

Dans notre fichier, utilisateur_model : 

<?php

  class Utilisateur_model extends CI_Model {
  
  protected $table = 'utilisateur';
  
  public function lastThreeScore() {
        
    $query = $this->db->select('score')
                      ->limit(3)
                      ->get($this->table);
    
    
    if ($query->num_rows() > 0) {

      return $query->result();
      
    } else {
      
      return false;
    }
    
    
  }
  
 
?>

On souhaite, ici, afficher, les trois premiers scores.

Pour afficher, dans notre vue :

<?php

   $lastScores = $this->utilisateur_model->lastThreeScore();
                    foreach ($lastScores as $lastScore) {
                    
                        echo $lastScore->score.'<br>' ;
                    }

?>

Conclusion

Pour en savoir plus, sur la classe Active Record, rendez-vous sur cette page

comments powered by Disqus
Copyright © 2019 blogdevphp.fr - Tous droits réservés