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.

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.
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:
ร possibile scaricare il codice sorgente delle viste cliccando sul link sottostante:
CodeVisualizzazioni del gestore contatti di Igniter Scarica


