Активен запис на 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 Вмъкване на активен запис

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 Изберете Активен запис

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 адрес в уеб браузъра

CodeIgniter Актуализиране на активен запис

Нека сега да покажем записите в базата данни и да видим дали промените са засегнати.

CodeIgniter Актуализиране на активен запис

Както можете да видите от даденото по-горе изображение, първият запис е актуализиран от 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бобщение

В този урок научихте как да работите с активен запис, за да вмъквате, актуализирате, изтривате и избирате записи от базата данни. Работихме със статични стойности за създаване на записи, актуализиране и изтриване. В следващия урок ще създадем потребителски интерфейс, който потребителят може да използва за динамично създаване на записи в базата данни.