Base de données CodeIgniter : configuration, modification, mise à jour, suppression de données

Base de données Codeigniter

Dans le didacticiel précédent, nous avons couvert les bases de l'enregistrement actif CodeIgniter et comment insérer, mettre à jour, supprimer et lire des enregistrements de la base de données. Dans ce didacticiel, nous créerons des modèles de base de données et utiliserons des formulaires pour créer et mettre à jour des enregistrements de base de données. si vous êtes entièrement nouveau dans l'utilisation de bases de données dans CodeIgniter, vous avez conseillé de lire le didacticiel précédent

Configuration de la base de données Codeigniter

Nous commencerons par créer la base de données du projet tutoriel. Nous allons créer une base de données simple pour gérer les coordonnées. Nous allons créer une base de données simple avec deux (2) tables nommant les amis et les villes dans lesquelles ils vivent. La relation entre les amis et les villes est individuelle avec id dans les villes comme clé primaire et city_id comme clé étrangère dans les tables des amis. .

Exécutez les scripts suivants pour créer la base de données :

CREATE TABLE `pals` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `city_id` int(11) DEFAULT NULL,
  `contact_name` varchar(245) DEFAULT NULL,
  `contact_number` varchar(245) DEFAULT NULL,
  `email_address` varchar(245) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

Créons maintenant la table des villes

CREATE TABLE `cities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(245) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

Modèles de base de données CodeIgniter

Nous allons maintenant créer des modèles pour notre base de données. Le modèle est la partie M du MVC. Le modèle traite de l'accès aux données, de la manipulation des données et de la logique métier.

Dans CodeIgniter, chaque modèle doit définir les méthodes qu'il prendra en charge. Au lieu de répéter le même code dans chaque modèle, nous tirerons parti de l'héritage de la programmation orientée objet et créerons une classe de modèle parent qui définira les méthodes de base que nous souhaitons que nos modèles prennent en charge.

Le tableau ci-dessous montre les méthodes que nous définirons et comment les données seront accessibles.

Ratio S / N Method Description
1 __construction Définit la méthode constructeur qui appelle la méthode constructeur parent
2 Avoir tout Récupère tous les champs et enregistrements de la base de données sans aucune condition
3 get_by_id Récupère une seule ligne de la base de données en utilisant la clé primaire de type INT nommée id
4 aller_où Récupère tous les champs de la base de données en fonction des critères basés sur
5 insérer Insère un nouvel enregistrement dans la base de données
6 Mise à jour Met à jour un enregistrement de base de données existant en fonction de la clé primaire de type INT nommée id
7 effacer Supprime un enregistrement existant de la base de données en fonction de la clé primaire de type INT nommée id

L'image suivante montre le diagramme de classes et la manière dont les modèles enfants Pals et Cities sont liés au modèle parent BaseModel.

Modèles de base de données CodeIgniter

Nous allons créer deux modèles comme décrit dans l'image ci-dessus

Créez une nouvelle classe BaseModel dans application/models/BaseModel.php

Ajoutez le code suivant

<?php

class BaseModel extends CI_Model {

    protected $table = '';

    public function __construct() {
        parent::__construct();
    }

    public function get_all() {
        return $this->db->get($this->table)
                        ->result();
    }

    public function get_by_id($id) {
        return $this->db->get_where($this->table, array('id' => $id))
                        ->row();
    }

    public function get_where($where) {
        return $this->db->where($where)
                        ->get($this->table)
                        ->result();
    }

    public function insert($data) {
        return $this->db->insert($this->table, $data);
    }

    public function update($id, $data) {
        $this->db->where('id', $id);
        $this->db->update($this->table, $data);
    }

    public function delete($id) {
        $this->db->where('id', $id);
        $this->db->delete($this->table);
    }
}

ICI,

  • protégé $table = ”; définit une variable protégée nommée table. Celui-ci sera renseigné par la classe enfant respective pour spécifier avec quelle table nos méthodes de classe de modèle de base doivent interagir.
  • public function __construct() {…} définit la méthode constructeur et exécute la méthode constructeur de la classe parent CI_Model.
  • get_all() {…} utilise la bibliothèque de base de données et la valeur de la variable $table pour exécuter la requête SELECT sur notre base de données.
  • get_by_id($id) {…} définit la méthode pour récupérer une seule ligne de la base de données et accepte un paramètre $id qui doit être de type de données INT.
  • get_where($where) {…} définit la méthode get qui vous permet de définir une clause Where.
  • insert($data) {…} définit la méthode d'insertion et accepte le paramètre de tableau $data qui contient les valeurs à écrire dans la base de données.
  • update($id, $data) {…} définit la méthode de mise à jour et accepte le paramètre de tableau $data qui contient les valeurs à mettre à jour dans la base de données.
  • delete($id) {…} définit la méthode de suppression qui accepte un paramètre de $id qui doit être du type de données INT.

maintenant que nous en avons fini avec la classe de modèle parent, créons nos modèles Pals

Créez un nouveau fichier dans application/models/Pals.php

Ajoutez le code suivant

<?php

class Pals_model extends BaseModel {

    protected $table = 'pals';

    public function __construct() {
        parent::__construct();
    }

    public function get_by_id($id) {
        $this->db->where('pals.id', $id);
        $this->db->select('pals.*,cities.name');
        $this->db->from('pals');
        $this->db->join('cities', 'pals.city_id = cities.id');
        $query = $this->db->get();
        return $query->row();
    }

    public function get_all() {
        $this->db->select('pals.*,cities.name');
        $this->db->from('pals');
        $this->db->join('cities', 'pals.city_id = cities.id');
        $query = $this->db->get();
        return $query->result();
    }
}

ICI,

  • class Pals extends BaseModel {…} étend le modèle parent BaseModel et rend automatiquement toutes les méthodes définies dans le BaseModel accessibles à la classe enfant.
  • protected $table = 'copains'; définit le nom de la table associée à notre modèle parent
  • __construct() {…} initialise le constructeur parent
  • public function get_by_id($id) {…} remplace get_by_id pour fournir une implémentation personnalisée spécifique au modèle Pals. La requête pour get_by_id utilise une jointure pour récupérer le nom de la ville de la table des villes
  • public function get_all() {…} remplace la méthode get_all pour implémenter une requête de jointure entre la table des amis et des villes

Créez un nouveau fichier dans application/models/Cities.php

<?php
class Cities extends BaseModel {
    protected $table = 'cities';
    
    public function __construct() {
        parent::__construct();
    }
}

ICI,

protected $table = 'villes'; définit la table de base de données modèle.

Comme vous pouvez le voir dans le code ci-dessus, l'héritage nous fait gagner beaucoup de temps lorsque nous travaillons avec des modèles dans CodeIgniter. Dans la section suivante, nous apprendrons

Contrôleurs du gestionnaire de contacts

Maintenant que nous avons créé les modèles, créons les contrôleurs pour notre application. Nous aurons deux contrôleurs à savoir Contacts et Villes

Commençons par les villes

Créez un nouveau fichier Cities.php dans le répertoire application/controllers

Ajoutez le code suivant

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Cities extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->helper('url', 'form');
        $this->load->library('form_validation');
        $this->load->model('cities_model');
    }

    public function index() {
        $header['title'] = 'Cities Listing';
        $data['pals'] = $this->cities_model->get_all();

        $this->load->view('header',$header);
        $this->load->view('cities/index', $data);
        $this->load->view('footer');
    }

    public function create() {
        $header['title'] = 'Create City';
        
        $this->load->view('header',$header);
        $this->load->view('cities/create');
        $this->load->view('footer');
    }

    public function store() {
        $rules = array(
            array(
                'field' => 'name',
                'label' => 'City Name',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == TRUE) {
            $data = array('name' => $this->input->post('name'));
            $this->cities_model->insert($data);

            redirect(base_url('cities'));
        } else {
            $header['title'] = 'Create City';
            
            $this->load->view('header',$header);
            $this->load->view('cities/create');
            $this->load->view('footer');
        }
    }

    public function edit($id) {
        $header['title'] = 'Edit City';
        $data['city'] = $this->cities_model->get_by_id($id);

        $this->load->view('header', $header);
        $this->load->view('cities/edit', $data);
        $this->load->view('footer');
    }

    public function update($id) {
        $rules = array(
            array(
                'field' => 'name',
                'label' => 'City Name',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == TRUE) {
            $data = array('name' => $this->input->post('name'));
            $this->cities_model->update($id,$data);

            redirect(base_url('cities'));
        } else {
            $header['title'] = 'Edit City';
            $data['city'] = $this->cities_model->get_by_id($id);
            
            $this->load->view('header',$header);
            $this->load->view('cities/create',$data);
            $this->load->view('footer');
        }
    }

    public function delete($id) {
        $header['title'] = 'Delete City';
        $data['city'] = $this->cities_model->get_by_id($id);

        $this->load->view('header', $header);
        $this->load->view('cities/delete', $data);
        $this->load->view('footer');
    }

    public function destroy($id) {
        $this->cities_model->delete($id);

        redirect(base_url('cities'));
    }
}

ICI,

Le code ci-dessus implémente toutes les méthodes nécessaires pour créer, mettre à jour, supprimer et lire des lignes de la base de données.

Créez un autre fichier Contacts.php dans application/controllers

Ajoutez le code suivant

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Contacts extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->helper('url', 'form');
        $this->load->library('form_validation');
        $this->load->model('pals_model');
    }

    public function index() {
        $header['title'] = 'Contacts List';
        $data['pals'] = $this->pals_model->get_all();

        $this->load->view('header', $header);
        $this->load->view('contacts/index', $data);
        $this->load->view('footer');
    }

    public function create() {
        $this->load->model('cities_model');
        $header['title'] = 'Create Contact';
        $data['cities'] = $this->cities_model->get_all();

        $this->load->view('header', $header);
        $this->load->view('contacts/create', $data);
        $this->load->view('footer');
    }

    public function store() {
        $rules = array(
            array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
            ),
            array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                    'required' => 'You must provide a %s.',
                ),
            ),
            array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
            ),
            array(
                'field' => 'city_id',
                'label' => 'City',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $this->load->model('cities_model');
            $header['title'] = 'Create Contact';
            $data['cities'] = $this->cities_model->get_all();

            $this->load->view('header', $header);
            $this->load->view('contacts/create', $data);
            $this->load->view('footer');
        } else {
            $data = array(
                'city_id' => $this->input->post('city_id'),
                'contact_name' => $this->input->post('contact_name'),
                'contact_number' => $this->input->post('contact_number'),
                'email_address' => $this->input->post('email_address'),
            );

            $this->pals_model->insert($data);

            redirect(base_url('contacts'));
        }
    }

    public function edit($id) {
        $this->load->model('cities_model');
        $header['title'] = 'Edit Contact';
        $data['cities'] = $this->cities_model->get_all();

        $data['pal'] = $this->pals_model->get_by_id($id);
 
        $this->load->view('header', $header);
        $this->load->view('contacts/edit', $data);
        $this->load->view('footer');
    }

    public function update($id) {
        $rules = array(
            array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
            ),
            array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                    'required' => 'You must provide a %s.',
                ),
            ),
            array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
            ),
            array(
                'field' => 'city_id',
                'label' => 'City',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $this->load->model('cities_model');
            $header['title'] = 'Create Contact';
            $data['cities'] = $this->cities_model->get_all();

            $data['pal'] = $this->pals_model->get_by_id($id);

            $this->load->view('header', $header);
            $this->load->view('contacts/edit', $data);
            $this->load->view('footer');
        } else {
            $data = array(
                'city_id' => $this->input->post('city_id'),
                'contact_name' => $this->input->post('contact_name'),
                'contact_number' => $this->input->post('contact_number'),
                'email_address' => $this->input->post('email_address'),
            );

            $this->pals_model->update($id, $data);

            redirect(base_url('contacts'));
        }
    }

    public function delete($id) {
        $this->load->model('cities_model');
        $header['title'] = 'Delete Contact';
        $data['cities'] = $this->cities_model->get_all();

        $data['pal'] = $this->pals_model->get_by_id($id);

        $this->load->view('header',$header);
        $this->load->view('contacts/delete',$data);
        $this->load->view('footer');
    }
    
    public function destroy($id){
        $this->pals_model->delete($id);
        
        redirect(base_url('contacts'));
    }
}

Vues du gestionnaire de contacts

Nous avons déjà examiné les formulaires et la validation dans CodeIgniter dans les tutoriels précédents. Nous utiliserons le code que nous avons développé dans les tutoriels précédents. Par souci d'exhaustivité, nous reproduirons le code que nous avons créé dans les tutoriels précédents.

Les vues de notre application seront les suivantes

Vues du gestionnaire de contacts

Vous pouvez télécharger le code pour les vues ci-dessus en cliquant sur le lien ci-dessous

CodeIgniter Contacts Manager Vues Télécharger

Résumé

Dans ce didacticiel, vous apprendrez à créer des modèles dans CodeIgniter. Nous avons tiré parti de l'héritage dans la programmation orientée objet pour promouvoir la réutilisabilité du code en créant un modèle de base qui implémente les quatre principales opérations de base de données que sont l'insertion, la lecture, la mise à jour et la suppression.

Nous avons démontré les concepts à l'aide d'une application pratique, et nous continuerons de le faire dans les prochains tutoriels en ajoutant davantage de fonctionnalités à l'application.