Активная запись Codeigniter: вставка, выбор, обновление, удаление

Данные являются основой большинства приложений. Данные необходимо хранить таким образом, чтобы их можно было в дальнейшем анализировать для получения ценной информации и облегчения принятия бизнес-решений. Данные обычно хранятся в базе данных. Среди основных проблем при взаимодействии с базой данных — безопасность, простота доступа и реализация языка структурированных запросов (SQL) для конкретного поставщика базы данных.

Активная запись — это шаблон проектирования, который позволяет легко, безопасно и наглядно взаимодействовать с базой данных.

Активная запись имеет следующий видwing Преимущества

  • Вставляйте, обновляйте и удаляйте записи с помощью простых цепочек методов активной записи.
  • Отправляет пользовательский ввод безопасным способом с использованием параметров.
  • Позволяет работать с несколькими ядрами баз данных, такими как MySQL, SQL Server и т. д., без переписывания кода приложения.
  • CodeIgniter использует в фоновом режиме драйверы, специфичные для каждого ядра базы данных.

Как использовать Active Record: пример

В этом уроке мы обсудим учебную базу данных. У нас будет две таблицы: одна с заказами, другая с деtails.

В этом руководстве предполагается, что у вас установлена ​​и работает база данных MySQL.

Запустите следующееwing скрипты для создания учебной базы данных:

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_de.tails. Связь между двумя таблицами определяется идентификатором столбца в order_id и order_id в order_de.tails таблице.

Конфигурация базы данных CodeIgniter

Теперь мы настроим наше приложение для связи с этой базой данных.

Откройте файл конфигурации базы данных, расположенный в application/config/database.php.

найди фоллоwing строки в файле конфигурации

'hostname' => 'localhost',
	'username' => '',
	'password' => '',
	'database' => '',

Обновите приведенный выше код до следующегоwing

'hostname' => 'localhost',
	'username' => 'root',
	'password' => 'letmein',
	'database' => 'ci_active_record',

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

В дополнение к конфигурации базы данных detailsнам также нужно указать CodeIgniter загружать библиотеку базы данных при ее загрузке.

Шаг 1) Откройте подпискуwing файл application/config/autoload.php

Шаг 2) Найдите библиотеки ключей массива $autoload и загрузите библиотеку базы данных, как показано ниже.

$autoload['libraries'] = array('database');

ВОТ,

  • Приведенный выше код загружает библиотеку базы данных при запуске приложения.

CodeIgniter Вставить активную запись

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

Создайте новый файл application/controllers/ActiveRecordController.php.

Добавить подпискуwing код для 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 = […] определяет переменную data массива, которая использует имена таблиц базы данных в качестве ключей массива и присваивает им значения.
  • $this->db->insert('orders', $data); вызывает метод вставки библиотеки базы данных, передает порядок имен таблиц и переменную массива $data в качестве параметра. Эта строка генерирует оператор SQL INSERT, используя ключи массива в качестве имен полей и значения массива в качестве значений, которые будут вставлены в базу данных.

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

Теперь откройте маршруты.php в файле application/config/routes.php.

добавь подписчикаwing очередь на маршруты

$route['ar/insert'] = 'activerecordcontroller/store_order';

ВОТ,

  • Мы определяем маршрут ar/insert, который вызывает store_order ActiveRecordController.

Давайте теперь запустим веб-сервер, чтобы протестировать наш метод.

Запустите следующееwing команда для запуска встроенного сервера для PHP

cd C:\Sites\ci-app
php -S localhost:3000

ВОТ,

  • Приведенную выше команду браузера откройте командную строку и запустите встроенный сервер на порту 3000.

Загрузите подпискуwing URL-адрес в ваш браузер

http://localhost:3000/ar/insert

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

order has successfully been created

Откройте учебную базу данных MySQL и проверьте таблицу заказов.

Вы сможете создать вновь созданную строку, как показано на рисунке ниже.

CodeIgniter Вставить активную запись

CodeIgniter Выберите активную запись

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

Добавить подпискуwing метод для 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->имя_клиента »; печатает имя клиента из базы данных

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

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

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

Добавить подпискуwing маршрут

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

ВОТ,

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

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

http://localhost:3000/ar

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

CodeIgniter Выберите активную запись

CodeIgniter обновить активную запись

В этом разделе мы поговорим о том, как использовать активную запись для обновления базы данных. Допустим, мы хотим обновить имя клиента Джо Томас на Джо.

Добавить подпискуwing метод класса 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 и выполняет его для нашей базы данных.

Приведенный выше код создаст следующееwing Оператор SQL

UPDATE orders SET customer_name = 'Joe' WHERE id = 1;

Давайте теперь обновим файл router.php/config/routes.php.

Добавить подпискуwing маршрут

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

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

Загрузите подпискуwing URL-адрес в веб-браузере

CodeIgniter обновить активную запись

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

CodeIgniter обновить активную запись

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

CodeIgniter Удалить активную запись

Теперь мы удалим запись из базы данных. Мы удалим запись с идентификатором 3.

Добавить подпискуwing метод для 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.

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

http://localhost:3000/ar/delete

Итоги

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