Codeigniter Active Record: Infoga, Välj, Uppdatera, Ta bort

Data är blodlinjen för de flesta applikationer. Datan behöver lagras på ett sådant sätt att den kan analyseras vidare för att ge insikter och underlätta affärsbeslut. Uppgifterna lagras vanligtvis i databasen. Bland de viktigaste frågorna när du interagerar med databasen är säkerhet, enkel åtkomst och databasleverantörsspecifika implementeringar av Structured Query Language (SQL).

Active record är ett designmönster som gör det enkelt att interagera med databasen på ett enkelt, säkert och vältaligt sätt.

Den aktiva posten har följande fördelar

  • Infoga, uppdatera och ta bort poster med enkla metodkedjor av aktiv post
  • Skickar användarinmatningen på ett säkert sätt med hjälp av parametrar
  • Låter dig arbeta med flera databasmotorer som t.ex MySQL, SQL Server, etc. utan att skriva om applikationskoden
  • CodeIgniter använder drivrutiner som är specifika för varje databasmotor i bakgrunden.

Så här använder du Active Record: Exempel

I den här handledningen kommer vi att diskutera handledningsdatabasen. Vi kommer att ha två bord, det ena med beställningar och det andra med detaljer.

Denna handledning förutsätter att du har MySQL databas installerad och körs.

Kör följande skript för att skapa självstudiedatabas:

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;

Ovanstående kod skapar en databas med namnet ci_active_record och skapar två tabeller, nämligen order och order_details. Relationen mellan de två tabellerna definieras av kolumnen id i order och order_id i order_details tabellen.

CodeIgniter Databas Configuration

Vi kommer nu att konfigurera vår applikation för att kunna kommunicera med denna databas.

Öppna databaskonfigurationsfilen som finns i application/config/database.php

hitta följande rader i konfigurationsfilen

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

Uppdatera ovanstående kod till följande

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

Notera: du måste byta ut användarnamnet och lösenordet till de som matchar din konfiguration av MySQL.

Förutom databaskonfigurationsdetaljerna måste vi också berätta för CodeIgniter att ladda databasbiblioteket när det laddas

Steg 1) Öppna följande fil application/config/autoload.php

Steg 2) Leta upp $autoload array-nyckelbiblioteken och ladda databasbiblioteket som visas nedan

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

HÄR,

  • Ovanstående kod laddar databasbiblioteket när programmet startar

CodeIgniter Infoga aktiv post

För teständamål kommer vi att skapa en styrenhet och definierade rutter som vi kommer att använda för att interagera med vår applikation via aktiv post.

Skapa ett nytt filprogram/kontroller/ActiveRecordController.php

Lägg till följande kod till 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';
    }
}

HÄR,

  • $data = […] definierar en arrayvariabeldata som använder databastabellnamn som arraynycklar och tilldelar värden till dem
  • $this->db->insert('order', $data); anropar insertmetoden för databasbiblioteket, skickar in tabellnamnsordningarna och arrayvariabeln $data som parameter. Den här raden genererar SQL INSERT-satsen med hjälp av array-nycklarna som fältnamn och array-värdena som de värden som ska infogas i databasen.

Nu när vi framgångsrikt har skapat kontrollmetoden för aktiv registrering, måste vi nu skapa en rutt som vi kommer att anropa för att utföra kontrollmetoden.

Öppna nu routes.php i application/config/routes.php

lägg till följande rad till rutterna

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

HÄR,

  • Vi definierar en rutt ar/insert som anropar store_order för ActiveRecordController.

Låt oss nu starta webbservern för att testa vår metod.

Kör följande kommando för att starta den inbyggda servern för PHP

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

HÄR,

  • Ovanstående kommandobläddrare till kommandoraden och starta den inbyggda servern vid port 3000.

Ladda följande URL i din webbläsare

http://localhost:3000/ar/insert

Du kommer att få följande resultat

order has successfully been created

Öppna MySQL handledningsdatabasen och kontrollera beställningstabellen

Du kommer att kunna skapa en ny rad som visas i bilden nedan

CodeIgniter Infoga aktiv post

CodeIgniter Välj Active Record

I det här avsnittet kommer vi att se hur man läser de poster som vi har i databasen och visar dem i webbläsaren som en oordnad lista

Lägg till följande metod till 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>";
    }

HÄR,

  • $query = $this->db->get('orders'); kör urvalsfrågan mot ordertabellen och markerar alla fält
  • eka " Orderlista ”; visar en HTML-rubrik i storlek 4
  • eka " ”; skriver ut öppningstaggen för oordnad HTML-lista
  • foreach ($query->result() som $row) {...} använde for-loopen för att gå igenom resultaten som returnerades från databasen. eka " $row->kundnamn ”; skriver ut kundnamnet från databasen

Innan du laddar följande URL kan du ladda ett par poster till i databasen.

Låt oss nu definiera en rutt för SELECT-frågan

Öppna application/config/routes.php-tabellen

Lägg till följande rutt

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

HÄR,

  • Rutten ar pekar på indexmetoden för ActiveRecordController-klassen. Detta är som standard, det är därför vi inte angav indexmetoden som du gjorde för rutten som infogar poster

Förutsatt att webbservern redan körs, ladda följande URL

http://localhost:3000/ar

Du bör kunna se resultat som liknar följande i din webbläsare

CodeIgniter Välj Active Record

CodeIgniter Uppdatera Active Record

I det här avsnittet kommer vi att prata om hur man använder den aktiva posten för att uppdatera databasen. Låt oss säga att vi vill uppdatera kundnamnet Joe Thomas till Joe.

Lägg till följande metod till 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';
    }

HÄR,

  • $data = […] definierar de fält och värden som vi vill uppdatera i databastabellen
  • $this->db->where('id', 1); ställer in where-satsen för uppdateringsfrågan
  • $this->db->update('order', $data); genererar SQL-uppdateringsfrågan och kör den mot vår databas.

Ovanstående kod kommer att producera följande SQL-sats

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

Låt oss nu uppdatera routes.php-applikationen/config/routes.php

Lägg till följande rutt

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

Spara ändringarna

Ladda följande URL i webbläsaren

CodeIgniter Uppdatera Active Record

Låt oss nu visa databasposterna och se om ändringarna har påverkats.

CodeIgniter Uppdatera Active Record

Som du kan se från ovanstående bild har den första posten uppdaterats från Joe Thomas till Joe.

CodeIgniter Ta bort aktiv post

Vi kommer nu att radera en post från databasen. Vi kommer att radera posten med ID 3.

Lägg till följande metod till ActiveRecordController

public function delete_order() {
        $this->db->where('id', 3);
        $this->db->delete('orders');

        echo 'order has successfully been deleted';
    }

HÄR,

  • $this->db->where('id', 1); anger where-satsen
  • $this->db->delete('ordrar'); tar bort databasraden i ordertabellen baserat på de kriterier som ställts in med hjälp av where-satsen.

För att köra ovanstående kod, ladda följande URL i vår webbläsare

http://localhost:3000/ar/delete

Sammanfattning

I den här handledningen har du lärt dig hur du arbetar med en aktiv post för att infoga, uppdatera, ta bort och välja poster från databasen. Vi arbetade med statiska värden för att skapa poster, uppdatera och ta bort. I nästa handledning kommer vi att skapa ett användargränssnitt som användaren kan använda för att skapa poster dynamiskt i databasen.