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.

  • 🇧🇷 Schéma: Deux tables liées, « amis » et « villes », modélisent une relation un-à-un par clé étrangère.
  • ⚙️ Config: Le fichier database.php établit la connexion et la bibliothèque de base de données est chargée.
  • 🧬 Modèle de base : Un modèle parent définit les fonctions get_all, get_by_id, get_where, insert, update et delete.
  • 👨👩👧 héritage: Pals et Cities étendent BaseModel, ils réutilisent donc ses méthodes et les redéfinissent là où c'est nécessaire.
  • 🔗 Jointure : Le modèle Pals associe des villes pour récupérer le nom de la ville ainsi que ses coordonnées.
  • Contrôleurs: Les contrôleurs Villes et Contacts permettent de connecter les modèles, les formulaires et la validation.
  • ♻️ Réutilisation: L'héritage élimine le code CRUD redondant et allège les modèles.

CodeBase de données Igniter

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.

Diagramme de classes du modèle de base avec les modèles Pals et Cities

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 :

Vues du gestionnaire de contacts

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

FAQ

Un modèle de base contient une seule fois les méthodes partagées d'insertion, de lecture, de mise à jour et de suppression. Les modèles enfants héritent de ces méthodes et ne redéfinissent que les différences, ce qui élimine les duplications et permet de conserver des modèles de petite taille.

Chaque contact possède un identifiant de ville (city_id), et non le nom de la ville. La requête de remplacement joint la table des villes afin qu'elle renvoie le nom de la ville lisible pour chaque contact dans un seul résultat.

Le contrôleur charge le modèle, valide le formulaire soumis, puis enregistre les données et redirige l'utilisateur, ou recharge le formulaire en signalant les erreurs. Il assure la liaison entre le modèle, les vues et la bibliothèque de validation.

Oui. À partir de vos définitions de table, l'IA peut générer un BaseModel avec des méthodes CRUD et un modèle enfant par table, en ajoutant des substitutions de jointure lorsqu'une clé étrangère nécessite une étiquette lisible. RevConsultez les jointures générées.

La bibliothèque de base de données fournit les méthodes de requête brutes et Active Record. Un modèle encapsule ces appels en opérations significatives et réutilisables pour une table spécifique.ping accès aux données en dehors du contrôleur.

Résumez cet article avec :