Codeigniter Active Record:插入、选择、更新、删除

数据是大多数应用程序的生命线。数据的存储方式必须能够进一步分析以提供见解并促进业务决策。数据通常存储在数据库中。与数据库交互时,主要关注点是安全性、易访问性和结构化查询语言 (SQL) 的数据库供应商特定实现。

Active record 是一种设计模式,可以轻松、安全、简洁地与数据库进行交互。

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。这两个表之间的关系由 orders 表中的 id 列和 order_details 表中的 order_id 列定义。

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 数组键 libraries,然后按如下方式加载数据库库

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

此处,

  • 上面的代码会在应用程序启动时加载数据库库

CodeIgniter 插入 Active Record

为了测试目的,我们将创建一个控制器并定义我们将用于通过 active record 与我们的应用程序交互的路由。

创建一个新文件 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); 调用数据库库的 insert 方法,将表名 orders 和数组变量 $data 作为参数传递。此行使用数组键作为字段名,数组值作为要插入数据库的值来生成 SQL INSERT 语句。

现在我们已经成功创建了 active record 的控制器方法,现在我们需要创建一个路由来调用控制器方法。

现在打开 application/config/routes.php 中的 routes.php

将以下行添加到路由中

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

此处,

  • 我们定义了一个路由 ar/insert,它调用 ActiveRecordController 的 store_order 方法。

现在让我们启动 Web 服务器来测试我们的方法。

运行以下命令启动 PHP 的内置服务器

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

此处,

  • 上面的命令会在命令行中启动服务器,并在端口 3000 上启动内置服务器。

在浏览器中加载以下 URL

https://:3000/ar/insert

您将看到以下结果

order has successfully been created

打开 MySQL 教程数据库并检查 orders 表

您将能够看到新创建的行,如下图所示

CodeIgniter Insert Active Record

CodeIgniter 选择 Active Record

在本节中,我们将介绍如何读取数据库中的记录并将它们显示在 Web 浏览器中,作为无序列表

将以下方法添加到 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’); 对 orders 表运行 select 查询,选择所有字段
  • echo “<h4>订单列表</h4>”; 显示一个大小为 3 的 HTML 标题
  • echo “<ul>”; 打印无序 HTML 列表的开始标签
  • foreach ($query->result() as $row) {…} 使用 for 循环遍历从数据库返回的结果。 echo “<li>$row->customer_name</li>”; 打印数据库中的 customer_name

在加载以下 URL 之前,您可以向数据库加载更多记录。

让我们现在为 SELECT 查询定义一个路由

打开 application/config/routes.php 表

添加以下路由

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

此处,

  • 路由 ar 指向 ActiveRecordController 类的 index 方法。这是默认的,因此我们不需要像插入记录的路由那样指定 index 方法

假设 Web 服务器已在运行,请加载以下 URL

https://:3000/ar

您应该能够在 Web 浏览器中看到非常相似于以下内容的结果

CodeIgniter Select Active Record

CodeIgniter 更新 Active Record

在本节中,我们将讨论如何使用 active record 来更新数据库。假设我们要将客户名称 Joe Thomas 更新为 Joe。

将以下方法添加到 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 update 查询并针对我们的数据库执行它。

上面的代码将生成以下 SQL 语句

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

让我们现在更新 routes.php application/config/routes.php

添加以下路由

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

保存更改

在 Web 浏览器中加载以下 URL

CodeIgniter Update Active Record

现在让我们显示数据库记录,看看更改是否已生效。

CodeIgniter Update Active Record

如您从上图所示,第一条记录已从 Joe Thomas 更新为 Joe。

CodeIgniter 删除 Active Record

现在我们将从数据库中删除一条记录。我们将删除 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 子句设置的标准删除 orders 表中的数据库行。

要执行上述代码,请在我们的 Web 浏览器中加载以下 URL

https://:3000/ar/delete

摘要

在本教程中,您已学习了如何使用 active record 从数据库插入、更新、删除和选择记录。我们使用了静态值来创建、更新和删除记录。在下一个教程中,我们将创建一个用户界面,供用户动态创建数据库记录。