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 Inserisci record attivo

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 Seleziona il record attivo

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

CodeIgniter Aggiorna record attivo

Visualizziamo ora i record del database e vediamo se le modifiche sono state interessate.

CodeIgniter Aggiorna record attivo

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.