Активний запис Codeigniter: вставити, вибрати, оновити, видалити
Дані є родовід більшості програм. Дані потрібно зберігати таким чином, щоб їх можна було додатково проаналізувати, щоб надати розуміння та полегшити бізнес-рішення. Зазвичай дані зберігаються в базі даних. Серед головних проблем під час взаємодії з базою даних — безпека, легкість доступу та реалізація мови структурованих запитів (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. Зв’язок між двома таблицями визначається ідентифікатором стовпця в 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 Виберіть Active Record
У цьому розділі ми побачимо, як читати записи, які ми маємо в базі даних, і відображати їх у веб-браузері як невпорядкований список
Додайте наступний метод до 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 для перегляду результатів, отриманих із бази даних. луна " $row->customer_name ”; друкує 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 Видалити активний запис
Тепер ми видалимо запис із бази даних. Ми видалимо запис з ідентифікатором 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('замовлення'); видаляє рядок бази даних у таблиці замовлень на основі критеріїв, встановлених за допомогою пропозиції where.
Щоб виконати наведений вище код, завантажте наступну URL-адресу в наш веб-переглядач
http://localhost:3000/ar/delete
Підсумки
У цьому посібнику ви навчилися працювати з активним записом, щоб вставляти, оновлювати, видаляти та вибирати записи з бази даних. Ми працювали зі статичними значеннями для створення записів, оновлення та видалення. У наступному посібнику ми створимо інтерфейс користувача, який користувач зможе використовувати для динамічного створення записів у базі даних.