CodeBase de données Igniter : Configuration, mise à jour et suppression des données
⚡ Résumé intelligent
CodeIgniter Database crée des modèles et des contrôleurs pour un gestionnaire de contacts s'appuyant sur MySQLUn modèle de base partagé implémente les opérations d'insertion, de lecture, de mise à jour et de suppression, et les modèles enfants Pals et Cities en héritent, de sorte que les contrôleurs réutilisent les mêmes opérations de base de données dans toute l'application.

CodeBase de données Igniter
Dans le tutoriel précédent, nous avons abordé les bases de CodeIgniter Active Record : insertion, mise à jour, suppression et lecture d'enregistrements dans une base de données. Ce tutoriel vous permettra de créer des modèles de base de données et d'utiliser des formulaires pour créer et mettre à jour des enregistrements. Si vous débutez avec les bases de données, ce tutoriel est fait pour vous. CodeIgniter, il vous est conseillé de lire le précédent tutoriel d'abord.
CodeConfiguration de la base de données Igniter
Nous allons commencer par créer la base de données du projet tutoriel. Il s'agira d'une base de données simple pour la gestion des contacts, avec deux tables : « amis » et les villes où ils habitent. La relation entre « amis » et « villes » est de type un-à-un, avec « id » dans la table « villes » comme clé primaire et « city_id » comme clé étrangère dans la table « 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 le tableau des villes :
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) );
CodeModèles de base de données Igniter
Nous allons maintenant créer des modèles pour notre base de données. Le modèle correspond à la partie M de… MVC. Le modèle traite de l'accès aux données, de la manipulation des données et de la logique métier.
In CodeDans Igniter, chaque modèle doit définir les méthodes qu'il prend en charge. Au lieu de dupliquer le même code dans chaque modèle, nous exploiterons l'héritage, propre à la programmation orientée objet, et créerons une classe de modèle parente qui définira les méthodes de base que nos modèles devront prendre en charge.
Le tableau ci-dessous montre les méthodes que nous définirons et comment les données seront accessibles.
| Ratio S / N | Méthode | Description |
|---|---|---|
| 1 | __construction | Définit la méthode constructeur qui appelle la méthode constructeur parente. |
| 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 donnés. |
| 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 | delete | 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 illustre le diagramme de classes et la manière dont les modèles enfants Pals et Cities sont liés au modèle parent BaseModel.
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 et 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:
- La variable protégée `$table = ";` définit une variable nommée `table`. Cette variable est initialisée par la classe enfant correspondante afin de spécifier la table avec laquelle les méthodes du modèle de base doivent interagir.
- public function __construct() {…} définit le constructeur et exécute le constructeur de la classe parente CI_Model.
- get_all() {…} utilise la bibliothèque de base de données et la valeur de $table pour exécuter la requête SELECT.
- get_by_id($id) {…} récupère une seule ligne et accepte un paramètre $id de type de données INT.
- get_where($where) {…} définit une méthode get qui vous permet de définir une clause where.
- insert($data) {…} accepte le paramètre de tableau $data contenant les valeurs à écrire dans la base de données.
- La fonction update($id, $data) {…} accepte le paramètre de tableau $data contenant les valeurs à mettre à jour.
- delete($id) {…} accepte un paramètre $id de type de données INT.
Maintenant que nous avons terminé avec la classe du modèle parent, créons notre modèle Pals. Créez un nouveau fichier dans application/models/Pals_model.php et 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_model extends BaseModel {…} étend le modèle parent BaseModel et rend automatiquement toutes ses méthodes accessibles à la classe enfant.
- protected $table = 'pals'; définit le nom de la table associée à ce modèle.
- __construct() {…} initialise le constructeur parent.
- La fonction publique `get_by_id($id) {…}` redéfinit `get_by_id` pour fournir une implémentation personnalisée. La requête utilise une jointure pour récupérer le nom de la ville dans la table `cities`.
- La fonction publique get_all() {…} remplace get_all pour implémenter une requête de jointure entre les tables pals et cities.
Créez un nouveau fichier dans application/models/Cities_model.php :
<?php class Cities_model 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 constater, l'héritage nous fait gagner beaucoup de temps lorsque nous travaillons avec des modèles dans CodeAllumeur.
Contrôleurs du gestionnaire de contacts
Maintenant que nous avons créé les modèles, créons les contrôleurs de notre application. Nous aurons deux contrôleurs : Villes et Contacts. Commençons par Villes. Créez un nouveau fichier Cities.php dans le répertoire application/controllers et 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 dans la base de données.
Créez un autre fichier Contacts.php dans application/controllers et 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 CodeNous utiliserons Igniter, comme dans les tutoriels précédents, et le code que nous y avons développé. Pour être complet, voici à quoi ressemblera l'interface de notre application :
Vous pouvez télécharger le code des vues en cliquant sur le lien ci-dessous :
CodeGestionnaire de contacts Igniter : Vues et téléchargement


