Активная запись 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. Связь между двумя таблицами определяется идентификатором столбца в заказах и 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 = […] определяет переменную data массива, которая использует имена таблиц базы данных в качестве ключей массива и присваивает им значения.
- $this->db->insert('orders', $data); вызывает метод вставки библиотеки базы данных, передает порядок имен таблиц и переменную массива $data в качестве параметра. Эта строка генерирует оператор SQL INSERT, используя ключи массива в качестве имен полей и значения массива в качестве значений, которые будут вставлены в базу данных.
Теперь, когда мы успешно создали метод контроллера для активной записи, нам нужно будет создать маршрут, который мы будем вызывать для выполнения метода контроллера.
Теперь откройте маршруты.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 Выберите активную запись
В этом разделе мы увидим, как читать записи, которые есть в базе данных, и отображать их в веб-браузере в виде неупорядоченного списка.
Добавьте следующий метод в 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->имя_клиента »; печатает имя клиента из базы данных
Прежде чем загружать следующий 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;
Давайте теперь обновим файл router.php/config/routes.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->delete('orders'); удаляет строку базы данных в таблице заказов на основе критериев, установленных с помощью предложенияwhere.
Чтобы выполнить приведенный выше код, загрузите следующий URL-адрес в нашем веб-браузере.
http://localhost:3000/ar/delete
Резюме
В этом руководстве вы узнали, как работать с активной записью, чтобы вставлять, обновлять, удалять и выбирать записи из базы данных. Мы работали со статическими значениями для создания записей, обновления и удаления. В следующем уроке мы создадим пользовательский интерфейс, который пользователь сможет использовать для динамического создания записей в базе данных.




