Codeigniter Active Record: Sett inn, Velg, Oppdater, Slett
Data er blodlinjen til de fleste applikasjoner. Dataene må lagres på en slik måte at de kan analyseres videre for å gi innsikt og lette forretningsbeslutninger. Dataene lagres vanligvis i databasen. Blant de viktigste bekymringene når du samhandler med databasen er sikkerhet, enkel tilgang og databaseleverandørspesifikke implementeringer av Structured Query Language (SQL).
Active record er et designmønster som gjør det enkelt å samhandle med databasen på en enkel, sikker og veltalende måte.
Den aktive posten har følgende fordeler
- Sett inn, oppdater og slett poster med enkle metodekjeder for aktiv post
- Sender brukerinndata på en sikker måte ved hjelp av parametere
- Lar deg jobbe med flere databasemotorer som f.eks MySQL, SQL Server, etc. uten å omskrive applikasjonskoden
- CodeIgniter bruker drivere som er spesifikke for hver databasemotor i bakgrunnen.
Slik bruker du Active Record: Eksempel
I denne opplæringen vil vi diskutere opplæringsdatabasen. Vi vil ha to bord, det ene med bestillinger og det andre med detaljer.
Denne opplæringen forutsetter at du har MySQL database installert og kjører.
Kjør følgende skript for å lage opplæringsdatabase:
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;
Koden ovenfor oppretter en database kalt ci_active_record og lager to tabeller, nemlig ordrer og ordredetaljer. Forholdet mellom de to tabellene er definert av kolonne-id i ordre og ordre_id i tabellen ordredetaljer.
CodeIgniter-databasekonfigurasjon
Vi vil nå konfigurere applikasjonen vår for å kunne kommunisere med denne databasen.
Åpne databasekonfigurasjonsfilen som ligger i application/config/database.php
finn følgende linjer i konfigurasjonsfilen
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Oppdater koden ovenfor til følgende
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
OBS: du må erstatte brukernavnet og passordet til de som samsvarer med konfigurasjonen din MySQL.
I tillegg til databasekonfigurasjonsdetaljene, må vi også fortelle CodeIgniter om å laste databasebiblioteket når det laster
Trinn 1) Åpne følgende fil application/config/autoload.php
Trinn 2) Finn $autoload array-nøkkelbibliotekene og last databasebiblioteket som vist nedenfor
$autoload['libraries'] = array('database');
HER,
- Koden ovenfor laster databasebiblioteket når applikasjonen starter
CodeIgniter Sett inn aktiv post
For testformål vil vi lage en kontroller og definerte ruter som vi skal bruke for å samhandle med applikasjonen vår via aktiv post.
Opprett en ny filapplikasjon/kontrollere/ActiveRecordController.php
Legg til følgende kode i 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'; } }
HER,
- $data = […] definerer en matrisevariabeldata som bruker databasetabellnavn som matrisenøkler og tildeler verdier til dem
- $this->db->insert('ordrer', $data); kaller insert-metoden til databasebiblioteket, sender inn tabellnavneordene og matrisevariabelen $data som parameter. Denne linjen genererer SQL INSERT-setningen ved å bruke array-nøklene som feltnavn og array-verdiene som verdiene som skal settes inn i databasen.
Nå som vi har opprettet kontrollermetoden for aktiv registrering, må vi nå lage en rute som vi kaller for å utføre kontrollermetoden.
Åpne nå routes.php i application/config/routes.php
legg til følgende linje i rutene
$route['ar/insert'] = 'activerecordcontroller/store_order';
HER,
- Vi definerer en rute ar/insert som kaller opp store_ordren til ActiveRecordController.
La oss nå starte webserveren for å teste metoden vår.
Kjør følgende kommando for å starte den innebygde serveren for PHP
cd C:\Sites\ci-app php -S localhost:3000
HER,
- Kommandonettleseren ovenfor til kommandolinjen og start den innebygde serveren på port 3000.
Last inn følgende URL i nettleseren din
http://localhost:3000/ar/insert
Du vil få følgende resultater
order has successfully been created
Åpne MySQL opplæringsdatabasen og sjekk ordretabellen
Du vil kunne opprette en ny rad som vist på bildet nedenfor
CodeIgniter Velg Active Record
I denne delen vil vi se hvordan du leser postene vi har i databasen og viser dem i nettleseren som en uordnet liste
Legg til følgende metode til 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>"; }
HER,
- $query = $this->db->get('orders'); kjører select-spørringen mot ordretabellen og velger alle feltene
- ekko " Ordreliste "; viser en HTML-overskrift i størrelse 4
- ekko " "; skriver ut åpningstaggen for uordnet HTML-liste
- foreach ($query->result() som $row) {...} brukte for-løkken for å gå gjennom resultatene som ble returnert fra databasen. ekko " $row->kundenavn "; skriver ut kundenavn fra databasen
Før du laster inn følgende URL, kan du laste et par flere poster til databasen.
La oss nå definere en rute for SELECT-spørringen
Åpne application/config/routes.php-tabellen
Legg til følgende rute
$route['ar'] = 'activerecordcontroller';
HER,
- Ruten ar peker på indeksmetoden til ActiveRecordController-klassen. Dette er som standard, det er derfor vi ikke spesifiserte indeksmetoden som du gjorde for ruten som setter inn poster
Forutsatt at webserveren allerede kjører, last inn følgende URL
http://localhost:3000/ar
Du bør kunne se resultater som ligner mye på følgende i nettleseren din
CodeIgniter Oppdater Active Record
I denne delen vil vi snakke om hvordan du bruker den aktive posten til å oppdatere databasen. La oss si at vi ønsker å oppdatere kundenavnet Joe Thomas til Joe.
Legg til følgende metode til ActiveRecordController-klassen
public function update_order() { $data = [ 'customer_name' => 'Joe', ]; $this->db->where('id', 1); $this->db->update('orders', $data); echo 'order has successfully been updated'; }
HER,
- $data = […] definerer feltene og verdiene som vi ønsker å oppdatere i databasetabellen
- $this->db->where('id', 1); setter where-klausulen i oppdateringsspørringen
- $this->db->update('ordrer', $data); genererer SQL-oppdateringsspørringen og kjører den mot databasen vår.
Koden ovenfor vil produsere følgende SQL-setning
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
La oss nå oppdatere routes.php-applikasjonen/config/routes.php
Legg til følgende rute
$route['ar/update'] = 'activerecordcontroller/update_order';
Lagre endringene
Last ned følgende URL i nettleseren
La oss nå vise databasepostene og se om endringene har blitt påvirket.
Som du kan se fra bildet ovenfor, har den første posten blitt oppdatert fra Joe Thomas til Joe.
CodeIgniter Slett Active Record
Vi vil nå slette en post fra databasen. Vi sletter posten med ID 3.
Legg til følgende metode til ActiveRecordController
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
HER,
- $this->db->where('id', 1); setter hvor-klausulen
- $this->db->delete('ordrer'); sletter databaseraden i ordretabellen basert på kriteriene satt ved hjelp av where-leddet.
For å utføre koden ovenfor, last inn følgende URL i nettleseren vår
http://localhost:3000/ar/delete
Oppsummering
I denne opplæringen har du lært hvordan du arbeider med en aktiv post for å sette inn, oppdatere, slette og velge poster fra databasen. Vi jobbet med statiske verdier for å lage poster, oppdatere og slette. I neste veiledning vil vi lage et brukergrensesnitt som brukeren kan bruke til å lage poster dynamisk i databasen.