Активен запис на Codeigniter: Вмъкване, избор, актуализиране, изтриване
Данните са кръвната линия на повечето приложения. Данните трябва да се съхраняват по такъв начин, че да могат да бъдат допълнително анализирани, за да предоставят прозрения и да улеснят бизнес решенията. Данните обикновено се съхраняват в базата данни. Сред основните проблеми при взаимодействието с базата данни са сигурността, лесният достъп и специфичните за доставчика на базата данни реализации на Structured Query Language (SQL).
Активният запис е модел на проектиране, който улеснява взаимодействието с базата данни по лесен, сигурен и красноречив начин.
Активният запис има следните предимства
- Вмъквайте, актуализирайте и изтривайте записи с прости вериги от методи на активен запис
- Изпраща въведеното от потребителя по сигурен начин с помощта на параметри
- Позволява ви да работите с множество машини за бази данни, като напр MySQL, SQL Server и др. без пренаписване на кода на приложението
- CodeIgniter използва драйвери, специфични за всяка база данни на заден план.
Как да използвате Active Record: Пример
В този урок ще обсъдим базата данни на урока. Ще имаме две маси, едната с поръчки, другата с подробности.
Този урок предполага, че имате MySQL инсталирана и работеща база данни.
Изпълнете следните скриптове, за да създадете база данни с уроци:
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;
Горният код създава база данни с име ci_active_record и създава две таблици, а именно orders и order_details. Връзката между двете таблици се определя от id на колоната в orders и order_id в таблицата order_details.
Конфигурация на база данни на CodeIgniter
Сега ще конфигурираме нашето приложение, за да може да комуникира с тази база данни.
Отворете конфигурационния файл на базата данни, намиращ се в application/config/database.php
намерете следните редове в конфигурационния файл
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Актуализирайте горния код до следния
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Забележка: ще трябва да замените потребителското име и паролата с тези, които отговарят на вашата конфигурация на MySQL.
В допълнение към подробностите за конфигурацията на базата данни, ние също трябва да кажем на CodeIgniter да зарежда библиотеката на базата данни, когато се зареди
Стъпка 1) Отворете следния файл application/config/autoload.php
Стъпка 2) Намерете ключовите библиотеки на масива $autoload и заредете библиотеката на базата данни, както е показано по-долу
$autoload['libraries'] = array('database');
ТУК,
- Горният код зарежда библиотеката на базата данни при стартиране на приложението
CodeIgniter Вмъкване на активен запис
За целите на тестването ще създадем контролер и дефинирани маршрути, които ще използваме за взаимодействие с нашето приложение чрез активен запис.
Създайте нов файл application/controllers/ActiveRecordController.php
Добавете следния код към 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'; } }
ТУК,
- $data = […] дефинира масив с променливи данни, който използва имена на таблици в базата данни като ключове за масиви и им присвоява стойности
- $this->db->insert('orders', $data); извиква метода за вмъкване на библиотеката на базата данни, предава поръчките за имена на таблици и променливата на масива $data като параметър. Този ред генерира оператора SQL INSERT, използвайки ключовете на масива като имена на полета и стойностите на масива като стойности, които трябва да бъдат вмъкнати в базата данни.
Сега, след като успешно създадохме метода на контролера за активен запис, сега ще трябва да създадем маршрут, който ще извикаме, за да изпълним метода на контролера.
Сега отворете routes.php в application/config/routes.php
добавете следния ред към маршрутите
$route['ar/insert'] = 'activerecordcontroller/store_order';
ТУК,
- Ние дефинираме маршрут ar/insert, който извиква store_order на ActiveRecordController.
Нека сега стартираме уеб сървъра, за да тестваме нашия метод.
Изпълнете следната команда, за да стартирате вградения сървър за PHP
cd C:\Sites\ci-app php -S localhost:3000
ТУК,
- Горната команда браузър към командния ред и стартирайте вградения сървър на порт 3000.
Заредете следния URL във вашия браузър
http://localhost:3000/ar/insert
Ще получите следните резултати
order has successfully been created
Отворете MySQL база данни с уроци и проверете таблицата с поръчки
Ще можете да създадете новосъздадения ред, както е показано на изображението по-долу
CodeIgniter Изберете Активен запис
В този раздел ще видим как да четем записите, които имаме в базата данни, и да ги показваме в уеб браузъра като неподреден списък
Добавете следния метод към 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>"; }
ТУК,
- $query = $this->db->get('orders'); изпълнява заявката за избор спрямо таблицата с поръчки, като избира всички полета
- ехо “ Списък на поръчките ”; показва HTML заглавие с размер 4
- ехо “ ”; отпечатва отварящия таг за неподреден HTML списък
- foreach ($query->result() as $row) {…} използва for цикъла, за да премине през резултатите, върнати от базата данни. ехо “ $ред->име_на_клиента ”; отпечатва customer_name от базата данни
Преди да заредите следния URL адрес, можете да заредите още няколко записа в базата данни.
Нека сега дефинираме маршрут за заявката SELECT
Отворете таблицата application/config/routes.php
Добавете следния маршрут
$route['ar'] = 'activerecordcontroller';
ТУК,
- Маршрутът ar сочи към индексния метод на класа ActiveRecordController. Това е по подразбиране, затова не посочихме метода на индексиране, както направихте за маршрута, който вмъква записи
Ако приемем, че уеб сървърът вече работи, заредете следния URL адрес
http://localhost:3000/ar
Трябва да можете да видите резултати, които са много подобни на следните във вашия уеб браузър
CodeIgniter Актуализиране на активен запис
В този раздел ще говорим за това как да използвате активния запис за актуализиране на базата данни. Да кажем, че искаме да актуализираме името на клиента Джо Томас на Джо.
Добавете следния метод към класа 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'; }
ТУК,
- $data = […] дефинира полетата и стойностите, които искаме да актуализираме в таблицата на базата данни
- $this->db->where('id', 1); задава клаузата where на заявката за актуализиране
- $this->db->update('orders', $data); генерира SQL заявката за актуализиране и я изпълнява спрямо нашата база данни.
Горният код ще създаде следния SQL оператор
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Нека сега актуализираме routes.php application/config/routes.php
Добавете следния маршрут
$route['ar/update'] = 'activerecordcontroller/update_order';
Запазете промените
Заредете следния URL адрес в уеб браузъра
Нека сега да покажем записите в базата данни и да видим дали промените са засегнати.
Както можете да видите от даденото по-горе изображение, първият запис е актуализиран от Joe Thomas на Joe.
CodeIgniter Изтриване на активен запис
Сега ще изтрием запис от базата данни. Ще изтрием записа с id 3.
Добавете следния метод към ActiveRecordController
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
ТУК,
- $this->db->where('id', 1); задава клаузата where
- $this->db->delete('orders'); изтрива реда на базата данни в таблицата с поръчки въз основа на зададените критерии с помощта на клаузата where.
За да изпълните горния код, заредете следния URL адрес в нашия уеб браузър
http://localhost:3000/ar/delete
Oбобщение
В този урок научихте как да работите с активен запис, за да вмъквате, актуализирате, изтривате и избирате записи от базата данни. Работихме със статични стойности за създаване на записи, актуализиране и изтриване. В следващия урок ще създадем потребителски интерфейс, който потребителят може да използва за динамично създаване на записи в базата данни.