Codeigniter Active Record: Indsæt, Vælg, Opdater, Slet

Data er blodlinjen for de fleste applikationer. Dataene skal opbevares på en sådan måde, at de kan analyseres yderligere for at give indsigt og lette forretningsbeslutninger. Data gemmes normalt i databasen. Blandt de vigtigste bekymringer ved interaktion med databasen er sikkerhed, nem adgang og databaseleverandørspecifikke implementeringer af Structured Query Language (SQL).

Active record er et designmønster, der gør det nemt at interagere med databasen på en nem, sikker og veltalende måde.

Den aktive registrering har følgende fordele

  • Indsæt, opdater og slet poster med simple metodekæder af aktiv post
  • Sender brugerinput på en sikker måde ved hjælp af parametre
  • Giver dig mulighed for at arbejde med flere databasemotorer som f.eks MySQL, SQL Server osv. uden at omskrive applikationskoden
  • CodeIgniter bruger drivere, der er specifikke for hver databasemotor i baggrunden.

Sådan bruges Active Record: Eksempel

I dette selvstudie vil vi diskutere selvstudiedatabasen. Vi vil have to borde, det ene med bestillinger og det andet med detaljer.

Denne vejledning antager, at du har MySQL database installeret og kører.

Kør følgende scripts for at oprette selvstudiedatabase:

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;

Ovenstående kode opretter en database ved navn ci_active_record og opretter to tabeller, nemlig ordrer og ordre_detaljer. Forholdet mellem de to tabeller er defineret af kolonne-id i ordrer og ordre_id i tabellen ordredetaljer.

CodeIgniter-databasekonfiguration

Vi vil nu konfigurere vores applikation til at kunne kommunikere med denne database.

Åbn databasekonfigurationsfilen i application/config/database.php

find følgende linjer i konfigurationsfilen

'hostname' => 'localhost',
	'username' => '',
	'password' => '',
	'database' => '',

Opdater ovenstående kode til følgende

'hostname' => 'localhost',
	'username' => 'root',
	'password' => 'letmein',
	'database' => 'ci_active_record',

Bemærk: du bliver nødt til at erstatte brugernavnet og adgangskoden til dem, der matcher din konfiguration af MySQL.

Ud over databasekonfigurationsdetaljerne skal vi også bede CodeIgniter om at indlæse databasebiblioteket, når det indlæses

Trin 1) Åbn følgende fil application/config/autoload.php

Trin 2) Find $autoload array-nøglebibliotekerne og indlæs databasebiblioteket som vist nedenfor

$autoload['libraries'] = array('database');

HER,

  • Ovenstående kode indlæser databasebiblioteket, når applikationen starter

CodeIgniter Indsæt Active Record

Til testformål vil vi oprette en controller og definerede ruter, som vi vil bruge til at interagere med vores applikation via aktiv registrering.

Opret et nyt filprogram/controllere/ActiveRecordController.php

Tilføj følgende kode til 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 matrixvariabel data, der bruger databasetabelnavne som matrixnøgler og tildeler værdier til dem
  • $this->db->insert('ordrer', $data); kalder indsættelsesmetoden for databasebiblioteket, sender tabelnavnerækkefølgerne og arrayvariablen $data som parameter. Denne linje genererer SQL INSERT-sætningen ved at bruge array-nøglerne som feltnavne og array-værdierne som de værdier, der skal indsættes i databasen.

Nu hvor vi med succes har oprettet controller-metoden til aktiv registrering, bliver vi nu nødt til at oprette en rute, som vi vil kalde for at udføre controller-metoden.

Åbn nu routes.php i application/config/routes.php

tilføje følgende linje til ruterne

$route['ar/insert'] = 'activerecordcontroller/store_order';

HER,

  • Vi definerer en rute ar/insert, der kalder store_ordren for ActiveRecordController.

Lad os nu starte webserveren for at teste vores metode.

Kør følgende kommando for at starte den indbyggede server til PHP

cd C:\Sites\ci-app
php -S localhost:3000

HER,

  • Ovenstående kommandobrowser til kommandolinjen og start den indbyggede server ved port 3000.

Indlæs følgende URL i din browser

http://localhost:3000/ar/insert

Du får følgende resultater

order has successfully been created

Åbne MySQL tutorial database og tjek ordretabellen

Du vil være i stand til at oprette en ny række som vist på billedet nedenfor

CodeIgniter Indsæt Active Record

CodeIgniter Vælg Active Record

I dette afsnit vil vi se, hvordan du læser de poster, vi har i databasen og viser dem i webbrowseren som en uordnet liste

Tilføj 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('ordrer'); kører select-forespørgslen mod ordretabellen og vælger alle felterne
  • ekko " Ordreliste "; viser en HTML-overskrift i størrelse 4
  • ekko " "; udskriver åbningsmærket for ikke-ordnet HTML-liste
  • foreach ($query->result() som $row) {...} brugte for-løkken til at gå gennem resultaterne returneret fra databasen. ekko " $row->kundenavn "; udskriver kundenavn fra databasen

Før du indlæser følgende URL, kan du indlæse et par flere poster til databasen.

Lad os nu definere en rute for SELECT-forespørgslen

Åbn application/config/routes.php tabel

Tilføj følgende rute

$route['ar'] = 'activerecordcontroller';

HER,

  • Ruten ar peger på indeksmetoden for ActiveRecordController-klassen. Dette er som standard, det er derfor, vi ikke specificerede indeksmetoden, som du gjorde for ruten, der indsætter poster

Hvis du antager, at webserveren allerede kører, skal du indlæse følgende URL

http://localhost:3000/ar

Du bør være i stand til at se resultater, som i høj grad ligner følgende i din webbrowser

CodeIgniter Vælg Active Record

CodeIgniter Update Active Record

I dette afsnit vil vi tale om, hvordan man bruger den aktive post til at opdatere databasen. Lad os sige, at vi ønsker at opdatere kundenavnet Joe Thomas til Joe.

Tilføj 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 de felter og værdier, som vi ønsker at opdatere i databasetabellen
  • $this->db->where('id', 1); angiver where-klausulen i opdateringsforespørgslen
  • $this->db->update('ordrer', $data); genererer SQL-opdateringsforespørgslen og udfører den mod vores database.

Ovenstående kode vil producere følgende SQL-sætning

UPDATE orders SET customer_name = 'Joe' WHERE id = 1;

Lad os nu opdatere routes.php-applikationen/config/routes.php

Tilføj følgende rute

$route['ar/update'] = 'activerecordcontroller/update_order';

Gem ændringerne

Indlæs følgende URL i webbrowseren

CodeIgniter Update Active Record

Lad os nu vise databaseposterne og se, om ændringerne er blevet påvirket.

CodeIgniter Update Active Record

Som du kan se fra ovenstående billede, er den første rekord blevet opdateret fra Joe Thomas til Joe.

CodeIgniter Slet Active Record

Vi vil nu slette en post fra databasen. Vi sletter posten med id'et 3.

Tilføj 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); angiver hvor-klausulen
  • $this->db->delete('ordrer'); sletter databaserækken i ordretabellen baseret på de kriterier, der er sat ved hjælp af where-sætningen.

For at udføre ovenstående kode skal du indlæse følgende URL i vores webbrowser

http://localhost:3000/ar/delete

Resumé

I denne vejledning har du lært, hvordan du arbejder med en aktiv post for at indsætte, opdatere, slette og vælge poster fra databasen. Vi arbejdede med statiske værdier for at oprette poster, opdatere og slette. I den næste vejledning vil vi oprette en brugergrænseflade, som brugeren kan bruge til at oprette poster dynamisk i databasen.

Opsummer dette indlæg med: