Codeigniter Actief record: Invoegen, Selecteren, Bijwerken, Verwijderen

Data vormen de bloedlijn van de meeste toepassingen. De gegevens moeten zo worden opgeslagen dat ze verder kunnen worden geanalyseerd om inzichten te verschaffen en zakelijke beslissingen te vergemakkelijken. De gegevens worden meestal opgeslagen in de database. Een van de belangrijkste aandachtspunten bij de interactie met de database zijn beveiliging, toegankelijkheid en databaseleverancierspecifieke implementaties van Structured Query Language (SQL).

Actief record is een ontwerppatroon dat het gemakkelijk maakt om op een gemakkelijke, veilige en welsprekende manier met de database te communiceren.

Het actieve record heeft de volgende voordelen

  • Records invoegen, bijwerken en verwijderen met eenvoudige methodeketens van actieve records
  • Verzendt de gebruikersinvoer op een veilige manier met behulp van parameters
  • Hiermee kunt u met meerdere database-engines werken, zoals MySQL, SQL Server, etc. zonder de applicatiecode te herschrijven
  • CodeIgniter gebruikt stuurprogramma's die specifiek zijn voor elke database-engine op de achtergrond.

Hoe u Active Record gebruikt: voorbeeld

In deze tutorial bespreken we de tutorial database. We hebben twee tabellen, een met orders en de andere met details.

In deze zelfstudie wordt ervan uitgegaan dat dit het geval is MySQL database geïnstalleerd en actief.

Voer de volgende scripts uit om een ​​tutorial-database te maken:

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;

De bovenstaande code creëert een database met de naam ci_active_record en creëert twee tabellen, namelijk orders en order_details. De relatie tussen de twee tabellen wordt gedefinieerd door de kolom-id in orders en order_id in de order_details tabel.

CodeIgniter-databaseconfiguratie

We zullen nu onze applicatie configureren om met deze database te kunnen communiceren.

Open het databaseconfiguratiebestand in application/config/database.php

Zoek de volgende regels in het configuratiebestand

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

Werk de bovenstaande code bij naar het volgende

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

Opmerking: u zult de gebruikersnaam en het wachtwoord moeten vervangen door degene die overeenkomen met uw configuratie MySQL.

Naast de details van de databaseconfiguratie moeten we CodeIgniter ook vertellen om de databasebibliotheek te laden wanneer deze wordt geladen

Stap 1) Open het volgende bestand application/config/autoload.php

Stap 2) Zoek de $autoload array-sleutelbibliotheken en laad de databasebibliotheek zoals hieronder weergegeven

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

HIER,

  • De bovenstaande code laadt de databasebibliotheek wanneer de applicatie start

CodeIgniter Actieve record invoegen

Voor testdoeleinden zullen we een controller en gedefinieerde routes creëren die we zullen gebruiken om via actieve records met onze applicatie te communiceren.

Maak een nieuw bestand application/controllers/ActiveRecordController.php

Voeg de volgende code toe aan 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';
    }
}

HIER,

  • $data = […] definieert een arrayvariabele data die databasetabelnamen gebruikt als arraysleutels en wijst er waarden aan toe
  • $this->db->insert('bestellingen', $data); roept de invoegmethode van de databasebibliotheek aan, geeft de volgorde van de tabelnamen en de arrayvariabele $data als parameter door. Deze regel genereert de SQL INSERT-instructie met behulp van de arraysleutels als veldnamen en de arraywaarden als de waarden die in de database moeten worden ingevoegd.

Nu we met succes de controllermethode voor actieve records hebben gemaakt, moeten we nu een route maken die we zullen aanroepen om de controllermethode uit te voeren.

Open nu routes.php in application/config/routes.php

voeg de volgende regel toe aan de routes

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

HIER,

  • We definiëren een route ar/insert die de store_order van de ActiveRecordController aanroept.

Laten we nu de webserver starten om onze methode te testen.

Voer de volgende opdracht uit om de ingebouwde server voor PHP te starten

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

HIER,

  • De bovenstaande opdrachtbrowser naar de opdrachtregel en start de ingebouwde server op poort 3000.

Laad de volgende URL in uw browser

http://localhost:3000/ar/insert

U krijgt de volgende resultaten

order has successfully been created

Open de MySQL tutorialdatabase en controleer de bestellingentabel

U kunt een nieuw gemaakte rij maken, zoals weergegeven in de onderstaande afbeelding

CodeIgniter Actieve record invoegen

CodeIgniter Selecteer Actief record

In deze sectie zullen we zien hoe we de records die we in de database hebben, kunnen lezen en deze in de webbrowser kunnen weergeven als een ongeordende lijst

Voeg de volgende methode toe aan de 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>";
    }

HIER,

  • $query = $dit->db->get('bestellingen'); voert de selectiequery uit op basis van de ordertabel en selecteert alle velden
  • echo “ Bestellingenlijst ”; geeft een HTML-kop van grootte 4 weer
  • echo “ ”; drukt de openingstag af voor een niet-geordende HTML-lijst
  • foreach ($query->result() as $row) {…} gebruikte de for-lus om de resultaten uit de database te doorlopen. echo “ $row->klantnaam ”; drukt de klantnaam uit de database af

Voordat u de volgende URL laadt, kunt u nog een paar records in de database laden.

Laten we nu een route definiëren voor de SELECT-query

Open de tabel application/config/routes.php

Voeg de volgende route toe

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

HIER,

  • De route ar verwijst naar de indexmethode van de klasse ActiveRecordController. Dit is standaard en daarom hebben we de indexmethode niet gespecificeerd zoals u deed voor de route die records invoegt

Ervan uitgaande dat de webserver al draait, laadt u de volgende URL

http://localhost:3000/ar

U zou in uw webbrowser resultaten moeten kunnen zien die erg lijken op de volgende

CodeIgniter Selecteer Actief record

CodeIgniter werkt actief record bij

In deze sectie zullen we bespreken hoe u het actieve record kunt gebruiken om de database bij te werken. Stel dat we de klantnaam Joe Thomas willen bijwerken naar Joe.

Voeg de volgende methode toe aan de klasse 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';
    }

HIER,

  • $data = […] definieert de velden en waarden die we in de databasetabel willen bijwerken
  • $this->db->where('id', 1); stelt de Where-clausule van de updatequery in
  • $this->db->update('bestellingen', $data); genereert de SQL-updatequery en voert deze uit op onze database.

De bovenstaande code zal de volgende SQL-instructie produceren

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

Laten we nu de routes.php-applicatie/config/routes.php bijwerken

Voeg de volgende route toe

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

Sla de wijzigingen op

Laad de volgende URL in de webbrowser

CodeIgniter werkt actief record bij

Laten we nu de databaserecords weergeven en kijken of de wijzigingen zijn doorgevoerd.

CodeIgniter werkt actief record bij

Zoals u kunt zien in de bovenstaande afbeelding, is de eerste record bijgewerkt van Joe Thomas naar Joe.

CodeIgniter Actieve record verwijderen

We zullen nu een record uit de database verwijderen. We zullen de record met de id 3 verwijderen.

Voeg de volgende methode toe aan de ActiveRecordController

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

        echo 'order has successfully been deleted';
    }

HIER,

  • $this->db->where('id', 1); stelt de Where-clausule in
  • $this->db->delete('bestellingen'); verwijdert de databaserij in de ordertabel op basis van de criteria die zijn ingesteld met behulp van de WHERE-clausule.

Om de bovenstaande code uit te voeren, laadt u de volgende URL in onze webbrowser

http://localhost:3000/ar/delete

Samenvatting

In deze tutorial heeft u geleerd hoe u met een actief record kunt werken om records uit de database in te voegen, bij te werken, te verwijderen en te selecteren. We hebben met statische waarden gewerkt om records te maken, bij te werken en te verwijderen. In de volgende zelfstudie maken we een gebruikersinterface die de gebruiker kan gebruiken om records dynamisch in de database te maken.