Codeigniter Active Record: Vložit, vybrat, aktualizovat, smazat
Data jsou pokrevní linií většiny aplikací. Data musí být uložena takovým způsobem, aby mohla být dále analyzována, aby poskytla přehled a usnadnila obchodní rozhodnutí. Data jsou obvykle uložena v databázi. Mezi hlavní problémy při interakci s databází patří zabezpečení, snadný přístup a implementace strukturovaného dotazovacího jazyka (SQL) specifické pro dodavatele databáze.
Aktivní záznam je návrhový vzor, který usnadňuje interakci s databází snadným, bezpečným a výmluvným způsobem.
Aktivní záznam má následující výhody
- Vkládání, aktualizace a mazání záznamů pomocí jednoduchých řetězců metod aktivního záznamu
- Odešle uživatelský vstup bezpečným způsobem pomocí parametrů
- Umožňuje pracovat s více databázovými stroji jako např MySQL, SQL Server atd. bez přepisování kódu aplikace
- CodeIgniter používá ovladače specifické pro každý databázový stroj na pozadí.
Jak používat aktivní záznam: Příklad
V tomto tutoriálu budeme diskutovat o databázi tutoriálů. Budeme mít dva stoly, jeden s objednávkami a druhý s detaily.
Tento tutoriál předpokládá, že máte MySQL databáze nainstalována a spuštěna.
Spuštěním následujících skriptů vytvořte databázi výukových programů:
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;
Výše uvedený kód vytvoří databázi s názvem ci_active_record a vytvoří dvě tabulky, konkrétně orders a order_details. Vztah mezi těmito dvěma tabulkami je definován sloupcem id v orders a order_id v tabulce order_details.
Konfigurace databáze CodeIgniter
Nyní nakonfigurujeme naši aplikaci tak, aby byla schopna s touto databází komunikovat.
Otevřete konfigurační soubor databáze umístěný v application/config/database.php
vyhledejte následující řádky v konfiguračním souboru
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Aktualizujte výše uvedený kód na následující
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Poznámka: budete muset nahradit uživatelské jméno a heslo těmi, které odpovídají vaší konfiguraci MySQL.
Kromě podrobností o konfiguraci databáze musíme také sdělit CodeIgniter, aby načetl databázovou knihovnu, když se načte
Krok 1) Otevřete následující soubor application/config/autoload.php
Krok 2) Vyhledejte knihovny klíčů pole $autoload a načtěte databázovou knihovnu, jak je uvedeno níže
$autoload['libraries'] = array('database');
TADY,
- Výše uvedený kód načte knihovnu databáze při spuštění aplikace
CodeIgniter Vložit aktivní záznam
Pro účely testování vytvoříme kontrolér a definujeme cesty, které budeme používat k interakci s naší aplikací prostřednictvím aktivního záznamu.
Vytvořte nový soubor application/controllers/ActiveRecordController.php
Přidejte následující kód do 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'; } }
TADY,
- $data = […] definuje data proměnné pole, která používá názvy databázových tabulek jako klíče pole a přiřazuje jim hodnoty
- $this->db->insert('objednavky', $data); volá metodu insert databázové knihovny, předává pořadí jmen tabulky a proměnnou pole $data jako parametr. Tento řádek generuje příkaz SQL INSERT pomocí klíčů pole jako názvů polí a hodnot pole jako hodnot, které mají být vloženy do databáze.
Nyní, když jsme úspěšně vytvořili metodu kontroleru pro aktivní záznam, budeme nyní muset vytvořit trasu, kterou zavoláme k provedení metody kontroleru.
Nyní otevřete routes.php v application/config/routes.php
přidejte k trasám následující řádek
$route['ar/insert'] = 'activerecordcontroller/store_order';
TADY,
- Definujeme směrování ar/insert, které volá store_order ActiveRecordController.
Nyní spustíme webový server, abychom otestovali naši metodu.
Spuštěním následujícího příkazu spustíte vestavěný server pro PHP
cd C:\Sites\ci-app php -S localhost:3000
TADY,
- Výše uvedený příkazový prohlížeč na příkazový řádek a spusťte vestavěný server na portu 3000.
Načtěte si do prohlížeče následující URL
http://localhost:3000/ar/insert
Získáte následující výsledky
order has successfully been created
Otevřete MySQL výukovou databázi a zkontrolujte tabulku objednávek
Budete moci nově vytvořený řádek, jak je znázorněno na obrázku níže
CodeIgniter Vyberte aktivní záznam
V této části uvidíme, jak číst záznamy, které máme v databázi, a zobrazovat je ve webovém prohlížeči jako neuspořádaný seznam
Přidejte do ActiveRecordController následující metodu
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>"; }
TADY,
- $dotaz = $this->db->get('objednavky'); spustí výběrový dotaz proti tabulce objednávek a vybere všechna pole
- echo“ Výpis objednávek “; zobrazí záhlaví HTML o velikosti 4
- echo“ “; vytiskne úvodní značku pro neuspořádaný seznam HTML
- foreach ($query->result() as $row) {…} použil cyklus for k procházení výsledků vrácených z databáze. echo“ $row->customer_name “; vytiskne customer_name z databáze
Než načtete následující adresu URL, můžete do databáze načíst několik dalších záznamů.
Pojďme nyní definovat trasu pro dotaz SELECT
Otevřete tabulku application/config/routes.php
Přidejte následující trasu
$route['ar'] = 'activerecordcontroller';
TADY,
- Trasa ar ukazuje na metodu indexu třídy ActiveRecordController. Toto je výchozí nastavení, proto jsme neurčili metodu indexování, jako jste to udělali pro cestu, která vkládá záznamy
Za předpokladu, že webový server již běží, načtěte následující URL
http://localhost:3000/ar
Ve svém webovém prohlížeči byste měli vidět výsledky, které jsou velmi podobné následujícím
CodeIgniter Aktualizace aktivního záznamu
V této části si řekneme, jak používat aktivní záznam k aktualizaci databáze. Řekněme, že chceme aktualizovat jméno zákazníka Joe Thomas na Joe.
Přidejte následující metodu do třídy 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'; }
TADY,
- $data = […] definuje pole a hodnoty, které chceme aktualizovat v databázové tabulce
- $this->db->where('id', 1); nastavuje klauzuli where aktualizačního dotazu
- $this->db->update('objednávky', $data); vygeneruje SQL aktualizační dotaz a provede jej proti naší databázi.
Výše uvedený kód vytvoří následující příkaz SQL
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Pojďme nyní aktualizovat routes.php aplikaci/config/routes.php
Přidejte následující trasu
$route['ar/update'] = 'activerecordcontroller/update_order';
Uložte změny
Načtěte následující URL do webového prohlížeče
Pojďme si nyní zobrazit databázové záznamy a podívat se, zda byly změny ovlivněny.
Jak můžete vidět z výše uvedeného obrázku, první záznam byl aktualizován z Joe Thomase na Joe.
CodeIgniter Smazat aktivní záznam
Nyní vymažeme záznam z databáze. Smažeme záznam s ID 3.
Přidejte do ActiveRecordController následující metodu
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
TADY,
- $this->db->where('id', 1); nastavuje klauzuli where
- $this->db->delete('objednávky'); odstraní řádek databáze v tabulce objednávek na základě kritérií nastavených pomocí klauzule where.
Chcete-li spustit výše uvedený kód, načtěte do našeho webového prohlížeče následující adresu URL
http://localhost:3000/ar/delete
Shrnutí
V tomto tutoriálu jste se naučili pracovat s aktivním záznamem a vkládat, aktualizovat, mazat a vybírat záznamy z databáze. Při vytváření záznamů, aktualizaci a mazání jsme pracovali se statickými hodnotami. V dalším tutoriálu vytvoříme uživatelské rozhraní, které může uživatel použít k dynamickému vytváření záznamů v databázi.