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 Sett inn aktiv post

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 Velg Active Record

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

CodeIgniter Oppdater Active Record

La oss nå vise databasepostene og se om endringene har blitt påvirket.

CodeIgniter Oppdater Active Record

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.