CodeIgniter Active Record: Запрос на вставку, обновление и удаление
⚡ Умное резюме
CodeIgniter Active Record — это шаблон проектирования, позволяющий модели читать и записывать данные в базу данных с помощью простых и безопасных цепочек методов. Он поддерживает операции вставки, выбора, обновления и удаления данных в различных системах управления базами данных без переписывания кода, а также параметризует входные данные для предотвращения SQL-инъекций.
Данные — это основа большинства приложений. Их необходимо хранить, чтобы затем анализировать, получать ценные сведения и принимать обоснованные бизнес-решения. Обычно данные хранятся в базе данных. Среди основных вопросов при работе с базой данных — безопасность, удобство доступа и специфические для поставщиков баз данных реализации языка структурированных запросов (SQL).
Active Record — это шаблон проектирования, который упрощает взаимодействие с базой данных безопасным и эффективным способом. Active Record обладает следующими преимуществами:
- Вставка, обновление и удаление записей с помощью простых цепочек методов.
- Обеспечивает безопасную передачу пользовательского ввода с использованием параметров.
- Позволяет работать с несколькими ядрами баз данных, такими как 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.
CodeКонфигурация базы данных Igniter
Теперь настроим наше приложение для взаимодействия с этой базой данных. Откройте файл конфигурации базы данных, расположенный в 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');
Вот:
- Приведённый выше код загружает библиотеку базы данных при запуске приложения.
CodeВставить активную запись в генератор импульсов
Для целей тестирования мы создадим контроллер и определим маршруты для взаимодействия с нашим приложением через Active Record. Создайте новый файл application/controllers/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);` вызывает метод `insert` библиотеки баз данных, передавая имя таблицы `orders` и переменную массива `$data`. Эта строка генерирует SQL-запрос `INSERT`, используя ключи массива в качестве имен полей и значения массива в качестве значений для вставки.
Теперь, когда мы создали метод контроллера, нам нужно создать маршрут, который мы будем вызывать для его выполнения. Откройте файл 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 Select 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'); выполняет запрос SELECT к таблице orders, выбирая все поля.
- эхо « Список заказов ”; отображает заголовок HTML.
- эхо « ";" выводит открывающий тег для неупорядоченного HTML-списка.
- Цикл foreach ($query->result() as $row) {…} перебирает результаты, возвращаемые из базы данных, и выводит " $row->customer_name ""; выводит customer_name.
Перед загрузкой URLТеперь вы можете добавить в базу данных еще несколько записей. Давайте определим маршрут для запроса SELECT. Откройте файл application/config/routes.php и добавьте следующий маршрут:
$route['ar'] = 'activerecordcontroller';
Вот:
- Маршрут `ar` указывает на метод `index` класса `ActiveRecordController`. Это значение по умолчанию, поэтому мы не указали метод `index`, как это было сделано для маршрута, который вставляет записи.
Предполагая, что веб-сервер уже запущен, загрузите следующее. URL: http://localhost:3000/arВ вашем веб-браузере должны отобразиться результаты, аналогичные приведенным ниже:
CodeОбновление зажигателя Активная запись
В этом разделе мы поговорим о том, как использовать Active Record для обновления базы данных. Предположим, мы хотим изменить имя клиента с Джо Томаса на Джо. Добавьте следующий метод в класс 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;
Теперь обновим файл application/config/routes.php и добавим следующий маршрут:
$route['ar/update'] = 'activerecordcontroller/update_order';
Сохраните изменения и загрузите следующее. URL в веб-браузере:
Теперь давайте отобразим записи в базе данных и посмотрим, вступили ли изменения в силу.
Как видно на изображении выше, первая запись была обновлена: вместо Джо Томаса теперь Джо.
CodeЗажигатель Удалить активную запись
Теперь удалим запись из базы данных. Удалим запись с идентификатором 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', 3); задает условие WHERE.
- Функция `$this->db->delete('orders');` удаляет строку в таблице заказов на основе критериев, заданных с помощью условия `where`.
Для выполнения приведенного выше кода загрузите следующее. URL в вашем веб-браузере: http://localhost:3000/ar/delete.





