Record attivo Codeigniter: inserisci, seleziona, aggiorna, elimina
I dati sono la linea di sangue della maggior parte delle applicazioni. I dati devono essere archiviati in modo tale da poter essere ulteriormente analizzati per fornire approfondimenti e facilitare le decisioni aziendali. I dati vengono solitamente archiviati nel database. Tra le principali preoccupazioni quando si interagisce con il database vi sono la sicurezza, la facilità di accesso e le implementazioni specifiche del fornitore di database di Structured Query Language (SQL).
Il record attivo è un modello di progettazione che semplifica l'interazione con il database in modo semplice, sicuro ed eloquente.
Il record attivo presenta i seguenti vantaggi
- Inserisci, aggiorna ed elimina record con semplici catene di metodi di record attivi
- Invia l'input dell'utente in modo sicuro utilizzando i parametri
- Ti consente di lavorare con più motori di database come MySQL, SQL Server, ecc. senza riscrivere il codice dell'applicazione
- CodeIgniter utilizza driver specifici per ciascun motore di database in background.
Come utilizzare Active Record: Esempio
In questo tutorial, parleremo del database del tutorial. Avremo due tabelle, una con gli ordini e l'altra con i dettagli.
Questo tutorial presuppone che tu abbia MySQL database installato e funzionante.
Eseguire i seguenti script per creare il database del tutorial:
CREATE SCHEMA ci_active_record; USE ci_active_record; CREATE TABLE `order_details` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_id` int(11) DEFAULT NULL, `item` varchar(245) DEFAULT NULL, `quantity` int(11) DEFAULT '0', `price` decimal(10,2) DEFAULT '0.00', `sub_total` decimal(10,2) DEFAULT '0.00', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` timestamp NULL DEFAULT NULL, `customer_name` varchar(245) DEFAULT NULL, `customer_address` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1;
Il codice soprastante crea un database denominato ci_active_record e crea due tabelle, ovvero orders e order_details. La relazione tra le due tabelle è definita dall'id di colonna in orders e order_id nella tabella order_details.
Configurazione del database CodeIgniter
Ora configureremo la nostra applicazione per poter comunicare con questo database.
Apri il file di configurazione del database situato in application/config/database.php
individuare le seguenti righe nel file di configurazione
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Aggiorna il codice soprastante come segue
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Nota: dovrai sostituire il nome utente e la password con quelli che corrispondono alla tua configurazione MySQL.
Oltre ai dettagli di configurazione del database, dobbiamo anche dire a CodeIgniter di caricare la libreria del database quando carica
Passo 1) Aprire il seguente file application/config/autoload.php
Passo 2) Individuare le librerie di chiavi dell'array $autoload e caricare la libreria del database come mostrato di seguito
$autoload['libraries'] = array('database');
QUI,
- Il codice precedente carica la libreria del database all'avvio dell'applicazione
CodeIgniter Inserisci record attivo
A scopo di test, creeremo un controller e percorsi definiti che utilizzeremo per interagire con la nostra applicazione tramite record attivo.
Crea un nuovo file application/controllers/ActiveRecordController.php
Aggiungere il seguente codice a ActiveRecordController.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class ActiveRecordController extends CI_Controller { public function store_order(){ $data = [ 'date' => '2018-12-19', 'customer_name' => 'Joe Thomas', 'customer_address' => 'US' ]; $this->db->insert('orders', $data); echo 'order has successfully been created'; } }
QUI,
- $data = […] definisce una variabile di array data che utilizza i nomi delle tabelle del database come chiavi di array e assegna loro valori
- $this->db->insert('ordini', $dati); chiama il metodo insert della libreria del database, passa il nome della tabella Orders e la variabile array $data come parametro. Questa riga genera l'istruzione SQL INSERT utilizzando le chiavi dell'array come nomi di campo e i valori dell'array come valori da inserire nel database.
Ora che abbiamo creato con successo il metodo controller per il record attivo, dovremo creare una route che chiameremo per eseguire il metodo controller.
Ora apri Routes.php in application/config/routes.php
aggiungere la seguente riga alle rotte
$route['ar/insert'] = 'activerecordcontroller/store_order';
QUI,
- Definiamo una route ar/insert che chiama store_order dell'ActiveRecordController.
Avviamo ora il server web per testare il nostro metodo.
Eseguire il seguente comando per avviare il server integrato per PHP
cd C:\Sites\ci-app php -S localhost:3000
QUI,
- Il browser dei comandi sopra riportato sulla riga di comando e avvia il server integrato sulla porta 3000.
Carica il seguente URL nel tuo browser
http://localhost:3000/ar/insert
Otterrai i seguenti risultati
order has successfully been created
Aprire il MySQL database dei tutorial e controlla la tabella degli ordini
Potrai creare la riga appena creata come mostrato nell'immagine qui sotto
CodeIgniter Seleziona il record attivo
In questa sezione vedremo come leggere i record che abbiamo nel database e visualizzarli nel browser web come un elenco non ordinato
Aggiungere il seguente metodo ad ActiveRecordController
public function index() { $query = $this->db->get('orders'); echo "<h3>Orders Listing</h3>"; echo "<ul>"; foreach ($query->result() as $row) { echo "<li>$row->customer_name</li>"; } echo "</ul>"; }
QUI,
- $query = $this->db->get('ordini'); esegue la query di selezione sulla tabella degli ordini selezionando tutti i campi
- eco " Elenco degli ordini ”; visualizza un'intestazione HTML di dimensione 4
- eco " ”; stampa il tag di apertura per l'elenco HTML non ordinato
- foreach ($query->result() as $row) {…} ha utilizzato il ciclo for per scorrere i risultati restituiti dal database. eco " $riga->nome_cliente ”; stampa il nome_cliente dal database
Prima di caricare il seguente URL, puoi caricare un altro paio di record nel database.
Ora definiamo un percorso per la query SELECT
Apri la tabella application/config/routes.php
Aggiungi il seguente percorso
$route['ar'] = 'activerecordcontroller';
QUI,
- La route ar punta al metodo dell'indice della classe ActiveRecordController. Questo è predefinito, ecco perché non abbiamo specificato il metodo dell'indice come hai fatto per il percorso che inserisce i record
Supponendo che il server web sia già in esecuzione, caricare il seguente URL
http://localhost:3000/ar
Dovresti essere in grado di vedere risultati molto simili a quelli seguenti nel tuo browser web
CodeIgniter Aggiorna record attivo
In questa sezione parleremo di come utilizzare il record attivo per aggiornare il database. Supponiamo di voler aggiornare il nome del cliente Joe Thomas in Joe.
Aggiungere il seguente metodo alla classe ActiveRecordController
public function update_order() { $data = [ 'customer_name' => 'Joe', ]; $this->db->where('id', 1); $this->db->update('orders', $data); echo 'order has successfully been updated'; }
QUI,
- $data = […] definisce i campi e i valori che desideriamo aggiornare nella tabella del database
- $questo->db->dove('id', 1); imposta la clausola where della query di aggiornamento
- $this->db->update('ordini', $dati); genera la query di aggiornamento SQL e la esegue sul nostro database.
Il codice soprastante produrrà la seguente istruzione SQL
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Aggiorniamo ora l'applicazione Routes.php/config/routes.php
Aggiungi il seguente percorso
$route['ar/update'] = 'activerecordcontroller/update_order';
Salva le modifiche
Carica il seguente URL nel browser web
Visualizziamo ora i record del database e vediamo se le modifiche sono state interessate.
Come puoi vedere dall'immagine sopra, il primo record è stato aggiornato da Joe Thomas a Joe.
CodeIgniter Elimina il record attivo
Ora elimineremo un record dal database. Elimineremo il record con l'ID 3.
Aggiungere il seguente metodo ad ActiveRecordController
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
QUI,
- $questo->db->dove('id', 1); imposta la clausola where
- $this->db->delete('orders'); elimina la riga del database nella tabella degli ordini in base ai criteri impostati utilizzando la clausola where.
Per eseguire il codice sopra, caricare il seguente URL nel nostro browser web
http://localhost:3000/ar/delete
Sommario
In questo tutorial hai imparato come lavorare con un record attivo per inserire, aggiornare, eliminare e selezionare record dal database. Abbiamo lavorato con valori statici per creare record, aggiornare ed eliminare. Nel prossimo tutorial creeremo un'interfaccia utente che l'utente potrà utilizzare per creare record in modo dinamico nel database.