CodeDatabase di Igniter: configurazione, aggiornamento ed eliminazione dei dati

โšก Riepilogo intelligente

CodeIgniter Database crea modelli e controller per un gestore di contatti supportato da MySQLUn BaseModel condiviso implementa le operazioni di inserimento, lettura, aggiornamento ed eliminazione, e i modelli figli Pals e Cities lo ereditano, in modo che i controller riutilizzino le stesse operazioni di database in tutta l'applicazione.

  • ๏ธ Programma: Due tabelle correlate, amici e cittร , modellano una relazione uno a uno tramite chiave esterna.
  • โš™๏ธ config: Il file database.php imposta la connessione e carica la libreria del database.
  • ๐Ÿงฌ Modello base: Un modello padre definisce get_all, get_by_id, get_where, insert, update e delete.
  • ๐Ÿ‘จ๐Ÿ‘ฉ๐Ÿ‘ง Ereditร : Pals e Cities estendono BaseModel, quindi riutilizzano i suoi metodi e li sovrascrivono quando necessario.
  • ๐Ÿ”— Adesioni: Il modello Pals collega le cittร  per recuperare il nome della cittร  insieme ai dettagli di contatto.
  • ๏ธ Controller: I controller di Cittร  e Contatti collegano tra loro modelli, moduli e convalide.
  • โ™ป๏ธ riutilizzo: L'ereditarietร  elimina il codice CRUD ripetuto e mantiene i modelli snelli.

CodeDatabase Igniter

CodeDatabase Igniter

Nel tutorial precedente abbiamo trattato le basi di CodeIgniter Active Record e come inserire, aggiornare, eliminare e leggere record dal database. In questo tutorial, creeremo modelli di database e useremo i moduli per creare e aggiornare i record del database. Se sei completamente nuovo al lavoro con i database in CodeAccenditore, ti consigliamo di leggere il tutorial precedente prima.

CodeConfigurazione del database di Igniter

Inizieremo creando il database del progetto del tutorial. Creeremo un semplice database per la gestione dei dati di contatto, con due tabelle chiamate "amici" e "cittร  in cui vivono". La relazione tra "amici" e "cittร " รจ uno a uno, con l'ID nella tabella "cittร " come chiave primaria e city_id come chiave esterna nella tabella "amici".

Eseguire i seguenti script per creare il database:

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

Creiamo ora la tabella delle cittร :

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

CodeModelli di database Igniter

Ora creeremo i modelli per il nostro database. Il modello รจ la parte M del MVC. Il modello si occupa dell'accesso ai dati, della manipolazione dei dati e della logica aziendale.

In CodeIn Igniter, ogni modello deve definire i metodi che supporterร . Invece di ripetere lo stesso codice in ogni modello, sfrutteremo l'ereditarietร  nella programmazione orientata agli oggetti e creeremo una classe modello padre che definisce i metodi di base che vogliamo che i nostri modelli supportino.

Nella tabella seguente sono riportate le modalitร  che definiremo e le modalitร  di accesso ai dati.

S / N Metodo Descrizione
1 __costruire Definisce il metodo costruttore che chiama il metodo costruttore della classe padre.
2 prendi tutto Recupera tutti i campi e i record dal database senza alcuna condizione.
3 get_by_id Recupera una singola riga dal database utilizzando la chiave primaria di tipo INT denominata id.
4 arrivare_dove Recupera tutti i campi dal database in base ai criteri specificati.
5 insert Inserisce un nuovo record nel database.
6 update Aggiorna un record di database esistente in base alla chiave primaria di tipo INT denominata id.
7 delete Elimina un record esistente dal database in base alla chiave primaria di tipo INT denominata id.

L'immagine seguente mostra il diagramma delle classi e come i modelli figli Pals e Cities si relazionano al modello padre BaseModel.

Diagramma delle classi di BaseModel con i modelli Pals e Cities

Creeremo due modelli come descritto nell'immagine qui sopra. Crea una nuova classe BaseModel in application/models/BaseModel.php e aggiungi il seguente codice:

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

Qui:

  • protected $table = โ€; definisce una variabile protetta denominata table. Questa viene popolata dalla rispettiva classe figlia per specificare con quale tabella i metodi del modello base devono interagire.
  • La funzione pubblica __construct() {โ€ฆ} definisce il costruttore ed esegue il costruttore della classe padre CI_Model.
  • get_all() {โ€ฆ} utilizza la libreria del database e il valore di $table per eseguire la query SELECT.
  • get_by_id($id) {โ€ฆ} recupera una singola riga e accetta un parametro $id di tipo dati INT.
  • get_where($where) {โ€ฆ} definisce un metodo get che consente di impostare una clausola where.
  • insert($data) {โ€ฆ} accetta il parametro array $data contenente i valori da scrivere nel database.
  • update($id, $data) {โ€ฆ} accetta il parametro array $data contenente i valori da aggiornare.
  • delete($id) {โ€ฆ} accetta un parametro $id di tipo dati INT.

Ora che abbiamo finito con la classe del modello principale, creiamo il nostro modello Pals. Crea un nuovo file in application/models/Pals_model.php e aggiungi il seguente codice:

<?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();
}
}

Qui:

  • La classe Pals_model estende BaseModel {โ€ฆ} estende il modello padre BaseModel e rende automaticamente accessibili tutti i suoi metodi alla classe figlia.
  • protected $table = 'pals'; definisce il nome della tabella associata a questo modello.
  • __construct() {โ€ฆ} inizializza il costruttore padre.
  • La funzione pubblica get_by_id($id) {โ€ฆ} sovrascrive get_by_id per fornire un'implementazione personalizzata. La query utilizza un join per recuperare il nome della cittร  dalla tabella cities.
  • La funzione pubblica get_all() {โ€ฆ} sovrascrive get_all per implementare una query di join tra le tabelle pals e cities.

Crea un nuovo file in application/models/Cities_model.php:

<?php
class Cities_model extends BaseModel {
protected $table = 'cities';

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

Qui:

  • protetta $tabella = 'cittร '; definisce la tabella del database modello.

Come puoi vedere, l'ereditarietร  ci fa risparmiare molto tempo quando lavoriamo con i modelli in CodeAccenditore.

Responsabile Contatti Controller

Ora che abbiamo creato i modelli, creiamo i controller per la nostra applicazione. Avremo due controller, Cittร  e Contatti. Iniziamo con Cittร . Crea un nuovo file chiamato Cities.php nella directory application/controllers e aggiungi il seguente codice:

<?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'));
}
}

Qui:

  • Il codice sopra riportato implementa tutti i metodi necessari per creare, aggiornare, eliminare e leggere righe dal database.

Crea un altro file chiamato Contacts.php nella cartella application/controllers e aggiungi il seguente codice:

<?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'));
}
}

Visualizzazioni Gestione contatti

Abbiamo giร  esaminato i moduli e la convalida in CodeAbbiamo giร  parlato di Igniter nei tutorial precedenti e useremo il codice che abbiamo sviluppato lรฌ. Per completezza, le viste della nostra applicazione saranno le seguenti:

Visualizzazioni del gestore dei contatti

รˆ possibile scaricare il codice sorgente delle viste cliccando sul link sottostante:

CodeVisualizzazioni del gestore contatti di Igniter Scarica

DOMANDE FREQUENTI

Un BaseModel contiene una sola volta i metodi condivisi di inserimento, lettura, aggiornamento ed eliminazione. I modelli figli li ereditano e sovrascrivono solo le parti diverse, eliminando cosรฌ le duplicazioni e mantenendo ogni modello di dimensioni ridotte.

Ogni contatto memorizza un city_id, non il nome della cittร . L'override unisce la tabella delle cittร  in modo che la query restituisca il nome leggibile della cittร  insieme a ciascun contatto in un unico risultato.

Il controller carica il modello, convalida il modulo inviato e, a seconda dei casi, salva i dati e reindirizza l'utente, oppure ricarica il modulo in caso di errori. Si occupa di collegare il modello, le viste e la libreria di validazione.

Sรฌ. A partire dalle definizioni delle tabelle, l'IA puรฒ generare un modello base con metodi CRUD e un modello figlio per ogni tabella, aggiungendo le sovrascritture delle join laddove una chiave esterna necessiti di un'etichetta leggibile. RevVisualizza le join generate.

La libreria del database fornisce i metodi raw query e Active Record. Un modello incapsula queste chiamate in operazioni significative e riutilizzabili per una tabella specifica, mantenendoping accesso ai dati in uscita dal controller.

Riassumi questo post con: