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 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 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
Laten we nu de databaserecords weergeven en kijken of de wijzigingen zijn doorgevoerd.
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.