Aktywny rekord Codeignitera: wstaw, wybierz, zaktualizuj, usuń
Dane są podstawą większości aplikacji. Dane należy przechowywać w taki sposób, aby można je było poddać dalszej analizie w celu uzyskania wglądu i ułatwienia podejmowania decyzji biznesowych. Dane są zwykle przechowywane w bazie danych. Do głównych problemów związanych z interakcją z bazą danych należą bezpieczeństwo, łatwość dostępu i specyficzne dla dostawcy bazy danych implementacje Structured Query Language (SQL).
Aktywny rekord to wzorzec projektowy, który ułatwia interakcję z bazą danych w łatwy, bezpieczny i wymowny sposób.
Aktywny rekord ma następujące zalety
- Wstawiaj, aktualizuj i usuwaj rekordy za pomocą prostych łańcuchów metod aktywnego rekordu
- Przesyła dane wejściowe użytkownika w bezpieczny sposób przy użyciu parametrów
- Umożliwia pracę z wieloma silnikami baz danych, takimi jak MySQL, SQL Server itp. bez przepisywania kodu aplikacji
- CodeIgniter używa w tle sterowników specyficznych dla każdego silnika bazy danych.
Jak korzystać z Active Record: Przykład
W tym samouczku omówimy bazę danych samouczka. Będziemy mieć dwie tabele, jedną z zamówieniami, drugą ze szczegółami.
W tym samouczku założono, że tak MySQL baza danych zainstalowana i działająca.
Uruchom następujące skrypty, aby utworzyć bazę danych samouczka:
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;
Powyższy kod tworzy bazę danych o nazwie ci_active_record i tworzy dwie tabele, mianowicie orders i order_details. Relacja między tymi dwiema tabelami jest zdefiniowana przez kolumnę id w orders i order_id w tabeli order_details.
Konfiguracja bazy danych CodeIgniter
Skonfigurujemy teraz naszą aplikację tak, aby mogła komunikować się z tą bazą danych.
Otwórz plik konfiguracyjny bazy danych znajdujący się w application/config/database.php
znajdź następujące wiersze w pliku konfiguracyjnym
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Zaktualizuj powyższy kod do następującego
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Uwaga: będziesz musiał zastąpić nazwę użytkownika i hasło tymi, które odpowiadają Twojej konfiguracji MySQL.
Oprócz szczegółów konfiguracji bazy danych musimy również polecić CodeIgniterowi załadowanie biblioteki bazy danych podczas ładowania
Krok 1) Otwórz następujący plik application/config/autoload.php
Krok 2) Znajdź biblioteki kluczy tablicowych $autoload i załaduj bibliotekę bazy danych, jak pokazano poniżej
$autoload['libraries'] = array('database');
TUTAJ,
- Powyższy kod ładuje bibliotekę bazy danych podczas uruchamiania aplikacji
CodeIgniter Wstaw aktywny rekord
Do celów testowych utworzymy kontroler i zdefiniowane trasy, których będziemy używać do interakcji z naszą aplikacją poprzez aktywny rekord.
Utwórz nowy plik application/controllers/ActiveRecordController.php
Dodaj następujący kod 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'; } }
TUTAJ,
- $data = […] definiuje zmienną tablicową data, która używa nazw tabel bazy danych jako kluczy tablicy i przypisuje im wartości
- $this->db->insert('zamówienia', $data); wywołuje metodę wstawiania biblioteki bazy danych, przekazuje kolejność nazw tabel i zmienną tablicową $data jako parametr. Ta linia generuje instrukcję SQL INSERT, używając kluczy tablicy jako nazw pól i wartości tablicy jako wartości, które mają zostać wstawione do bazy danych.
Teraz, gdy pomyślnie utworzyliśmy metodę kontrolera dla aktywnego rekordu, będziemy musieli teraz utworzyć trasę, którą wywołamy, aby wykonać metodę kontrolera.
Teraz otwórz Routes.php w application/config/routes.php
dodaj następujący wiersz do tras
$route['ar/insert'] = 'activerecordcontroller/store_order';
TUTAJ,
- Definiujemy trasę ar/insert, która wywołuje store_order kontrolera ActiveRecordController.
Uruchommy teraz serwer WWW, aby przetestować naszą metodę.
Uruchom następujące polecenie, aby uruchomić wbudowany serwer dla PHP
cd C:\Sites\ci-app php -S localhost:3000
TUTAJ,
- Powyższe polecenie przeglądarki do wiersza poleceń i uruchomienie wbudowanego serwera na porcie 3000.
Wczytaj następujący adres URL do swojej przeglądarki
http://localhost:3000/ar/insert
Otrzymasz następujące wyniki
order has successfully been created
Otwórz MySQL bazę tutoriali i sprawdź tabelę zamówień
Będziesz mógł utworzyć nowo utworzony wiersz, jak pokazano na obrazku poniżej
CodeIgniter Wybierz aktywny rekord
W tej sekcji zobaczymy jak odczytać rekordy jakie mamy w bazie i wyświetlić je w przeglądarce internetowej w postaci listy nieuporządkowanej
Dodaj następującą metodę do 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>"; }
TUTAJ,
- $query = $this->db->get('zamówienia'); uruchamia zapytanie wybierające względem tabeli zamówień, wybierając wszystkie pola
- Echo " Lista zamówień ”; wyświetla nagłówek HTML o rozmiarze 4
- Echo " ”; drukuje znacznik otwierający dla nieuporządkowanej listy HTML
- foreach ($query->result() as $row) {…} użył pętli for do przeglądania wyników zwróconych z bazy danych. Echo " $wiersz->nazwa_klienta ”; drukuje nazwę_klienta z bazy danych
Zanim załadujesz poniższy adres URL, możesz załadować do bazy danych jeszcze kilka rekordów.
Zdefiniujmy teraz trasę dla zapytania SELECT
Otwórz tabelę application/config/routes.php
Dodaj następującą trasę
$route['ar'] = 'activerecordcontroller';
TUTAJ,
- Trasa wskazuje na metodę indeksu klasy ActiveRecordController. Jest to ustawienie domyślne, dlatego nie określiliśmy metody indeksowania, tak jak to zrobiłeś w przypadku trasy, która wstawia rekordy
Zakładając, że serwer WWW jest już uruchomiony, załaduj następujący adres URL
http://localhost:3000/ar
W przeglądarce internetowej powinny zostać wyświetlone wyniki bardzo podobne do poniższych
Aktualizacja aktywnego rekordu w CodeIgniter
W tej sekcji porozmawiamy o tym, jak wykorzystać aktywny rekord do aktualizacji bazy danych. Załóżmy, że chcemy zmienić nazwę klienta Joe Thomas na Joe.
Dodaj następującą metodę do klasy 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'; }
TUTAJ,
- $data = […] definiuje pola i wartości, które chcemy zaktualizować w tabeli bazy danych
- $this->db->where('id', 1); ustawia klauzulę Where zapytania aktualizującego
- $this->db->update('zamówienia', $data); generuje zapytanie aktualizacyjne SQL i wykonuje je w naszej bazie danych.
Powyższy kod wygeneruje następujące polecenie SQL
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Zaktualizujmy teraz plik Routes.php application/config/routes.php
Dodaj następującą trasę
$route['ar/update'] = 'activerecordcontroller/update_order';
Zapisz zmiany
Załaduj następujący adres URL w przeglądarce internetowej
Wyświetlmy teraz rekordy bazy danych i sprawdźmy, czy zmiany zostały dotknięte.
Jak widać na powyższym obrazku, pierwszy rekord został zaktualizowany z Joe Thomas na Joe.
CodeIgniter Usuń aktywny rekord
Usuniemy teraz rekord z bazy danych. Usuniemy rekord o identyfikatorze 3.
Dodaj następującą metodę do ActiveRecordController
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
TUTAJ,
- $this->db->where('id', 1); ustawia klauzulę Where
- $this->db->delete('zamówienia'); usuwa wiersz bazy danych w tabeli zamówień na podstawie kryteriów ustawionych za pomocą klauzuli Where.
Aby wykonać powyższy kod, wczytaj następujący adres URL w naszej przeglądarce internetowej
http://localhost:3000/ar/delete
Podsumowanie
W tym samouczku nauczyłeś się, jak pracować z aktywnym rekordem, aby wstawiać, aktualizować, usuwać i wybierać rekordy z bazy danych. Pracowaliśmy z wartościami statycznymi, aby tworzyć rekordy, aktualizować i usuwać. W następnym samouczku utworzymy interfejs użytkownika, za pomocą którego użytkownik będzie mógł dynamicznie tworzyć rekordy w bazie danych.