Учебники

8) Codeigniter Active Record

Данные являются родословной большинства приложений. Данные должны храниться таким образом, чтобы их можно было дополнительно проанализировать, чтобы получить представление и облегчить принятие деловых решений. Данные обычно хранятся в базе данных. Среди основных проблем при взаимодействии с базой данных — безопасность, простота доступа и специфичные для поставщика базы данных реализации языка структурированных запросов (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 Вставить активную запись

В целях тестирования мы создадим контроллер и определим маршруты, которые мы будем использовать для взаимодействия с нашим приложением через активную запись.

Создайте новый файл приложения / 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, используя ключи массива в качестве имен полей и значения массива в качестве значений, которые будут вставлены в базу данных.

Теперь, когда мы успешно создали метод контроллера для активной записи, теперь нам нужно создать маршрут, который мы будем вызывать для выполнения метода контроллера.

Теперь откройте route.php в приложении / config / rout.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: // локальный: 3000 / ар / вставка

Вы получите следующие результаты

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’); выполняет запрос на выборку таблицы заказов, выбирая все поля
  • echo «<h4> Распечатка заказов </ h4>»; отображает заголовок HTML размером 3
  • echo «<ul>»; печатает открывающий тег для неупорядоченного списка HTML
  • foreach ($ query-> result () как $ row) {…} использовал цикл for для циклического просмотра результатов, возвращаемых из базы данных. echo «<li> $ row-> customer_name </ li>»; печатает имя клиента из базы данных

Прежде чем загрузить следующий URL, вы можете загрузить еще пару записей в базу данных.

Теперь давайте определим маршрут для запроса SELECT

Откройте таблицу application / config / rout.php

Добавьте следующий маршрут

$route['ar'] = 'activerecordcontroller';

ВОТ,

  • Маршрут ar указывает на метод индекса класса ActiveRecordController. Это по умолчанию, поэтому мы не указали метод индекса, как вы указали для маршрута, который вставляет записи

Предполагая, что веб-сервер уже запущен, загрузите следующий URL

HTTP: // локальный: 3000 / ар

Вы должны быть в состоянии увидеть результаты, которые очень похожи на следующие в вашем веб-браузере

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;

Давайте теперь обновим приложение rout.php / config / rout.php

Добавьте следующий маршрут

$route['ar/update'] = 'activerecordcontroller/update_order';

Сохраните изменения

Загрузите следующий URL в веб-браузер

Давайте теперь отобразим записи базы данных и посмотрим, были ли затронуты изменения.

Как видно из приведенного выше изображения, первая запись была обновлена ​​с Джо Томаса до Джо.

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-> Удалить ( ‘заказов’); удаляет строку базы данных в таблице заказов на основе критериев, заданных с помощью предложения where.

Чтобы выполнить приведенный выше код, загрузите следующий URL в нашем веб-браузере.

HTTP: // локальный: 3000 / ар / удаление

Резюме

Из этого урока вы узнали, как работать с активной записью для вставки, обновления, удаления и выбора записей из базы данных. Мы работали со статическими значениями для создания записей, обновления и удаления. В следующем уроке мы создадим пользовательский интерфейс, который пользователь сможет использовать для динамического создания записей в базе данных.