Bản ghi hoạt động Codeigniter: Chèn, chọn, cập nhật, xóa

Dữ liệu là huyết mạch của hầu hết các ứng dụng. Dữ liệu cần được lưu trữ theo cách có thể được phân tích sâu hơn để cung cấp thông tin chi tiết và tạo điều kiện thuận lợi cho các quyết định kinh doanh. Dữ liệu thường được lưu trữ trong cơ sở dữ liệu. Một trong những mối quan tâm chính khi tương tác với cơ sở dữ liệu là tính bảo mật, tính dễ truy cập và việc triển khai Ngôn ngữ truy vấn có cấu trúc (SQL) cụ thể của nhà cung cấp cơ sở dữ liệu.

Bản ghi hoạt động là một mẫu thiết kế giúp bạn dễ dàng tương tác với cơ sở dữ liệu một cách dễ dàng, an toàn và hiệu quả.

Bản ghi hoạt động có những ưu điểm sau

  • Chèn, cập nhật và xóa bản ghi bằng chuỗi phương thức đơn giản của bản ghi đang hoạt động
  • Gửi thông tin đầu vào của người dùng một cách an toàn bằng cách sử dụng các tham số
  • Cho phép bạn làm việc với nhiều công cụ cơ sở dữ liệu như MySQL, SQL Server, v.v. mà không cần viết lại mã ứng dụng
  • CodeIgniter sử dụng trình điều khiển dành riêng cho từng công cụ cơ sở dữ liệu ở chế độ nền.

Cách sử dụng Active Record: Ví dụ

Trong hướng dẫn này, chúng ta sẽ thảo luận về cơ sở dữ liệu hướng dẫn. Chúng ta sẽ có hai bảng, một bảng chứa đơn hàng và bảng còn lại chứa thông tin chi tiết.

Hướng dẫn này giả sử bạn có MySQL cơ sở dữ liệu được cài đặt và chạy.

Chạy các tập lệnh sau để tạo cơ sở dữ liệu hướng dẫn:

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;

Đoạn mã trên tạo ra một cơ sở dữ liệu có tên là ci_active_record và tạo ra hai bảng là orders và order_details. Mối quan hệ giữa hai bảng được xác định bởi cột id trong orders và order_id trong bảng order_details.

Cấu hình cơ sở dữ liệu CodeIgniter

Bây giờ chúng tôi sẽ định cấu hình ứng dụng của mình để có thể giao tiếp với cơ sở dữ liệu này.

Mở tệp cấu hình cơ sở dữ liệu nằm trong application/config/database.php

xác định vị trí các dòng sau trong tệp cấu hình

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

Cập nhật mã trên thành mã sau

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

Lưu ý: bạn sẽ cần thay thế tên người dùng và mật khẩu bằng tên phù hợp với cấu hình của bạn MySQL.

Ngoài các chi tiết cấu hình cơ sở dữ liệu, chúng ta cũng cần yêu cầu CodeIgniter tải thư viện cơ sở dữ liệu khi nó tải

Bước 1) Mở tệp sau application/config/autoload.php

Bước 2) Xác định vị trí các thư viện khóa mảng $autoload và tải thư viện cơ sở dữ liệu như bên dưới

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

ĐÂY,

  • Đoạn mã trên tải thư viện cơ sở dữ liệu khi ứng dụng khởi động

CodeIgniter Chèn bản ghi hoạt động

Với mục đích thử nghiệm, chúng tôi sẽ tạo một bộ điều khiển và các tuyến xác định mà chúng tôi sẽ sử dụng để tương tác với ứng dụng của mình thông qua bản ghi hoạt động.

Tạo một tệp mới application/controllers/ActiveRecordController.php

Thêm mã sau vào 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';
    }
}

ĐÂY,

  • $data = […] định nghĩa một biến mảng data sử dụng tên bảng cơ sở dữ liệu làm khóa mảng và gán giá trị cho chúng
  • $this->db->insert('orders', $data); gọi phương thức chèn của thư viện cơ sở dữ liệu, truyền vào thứ tự tên bảng và biến mảng $data làm tham số. Dòng này tạo câu lệnh SQL INSERT bằng cách sử dụng các khóa mảng làm tên trường và các giá trị mảng làm giá trị được chèn vào cơ sở dữ liệu.

Bây giờ chúng ta đã tạo thành công phương thức điều khiển cho bản ghi đang hoạt động, bây giờ chúng ta sẽ cần tạo một tuyến đường mà chúng ta sẽ gọi để thực thi phương thức điều khiển.

Bây giờ hãy mở Routes.php trong application/config/routes.php

thêm dòng sau vào các tuyến đường

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

ĐÂY,

  • Chúng ta xác định một tuyến đường ar/insert gọi store_order của ActiveRecordController.

Bây giờ hãy khởi động máy chủ web để kiểm tra phương pháp của chúng tôi.

Chạy lệnh sau để khởi động máy chủ tích hợp cho PHP

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

ĐÂY,

  • Trình duyệt lệnh trên tới dòng lệnh và khởi động máy chủ tích hợp tại cổng 3000.

Tải URL sau vào trình duyệt của bạn

http://localhost:3000/ar/insert

Bạn sẽ nhận được kết quả sau

order has successfully been created

Mở MySQL cơ sở dữ liệu hướng dẫn và kiểm tra bảng đơn hàng

Bạn sẽ có thể tạo hàng mới như trong hình bên dưới

CodeIgniter Chèn bản ghi hoạt động

CodeIgniter Chọn Bản ghi Hoạt động

Trong phần này, chúng ta sẽ xem cách đọc các bản ghi mà chúng ta có trong cơ sở dữ liệu và hiển thị chúng trong trình duyệt web dưới dạng danh sách không có thứ tự

Thêm phương thức sau vào 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>";
    }

ĐÂY,

  • $query = $this->db->get('orders'); chạy truy vấn chọn đối với bảng đơn hàng, chọn tất cả các trường
  • tiếng vang “ Danh sách đơn hàng ”; hiển thị tiêu đề HTML có kích thước 4
  • tiếng vang “ ”; in thẻ mở cho danh sách HTML không có thứ tự
  • foreach ($query->result() as $row) {…} đã sử dụng vòng lặp for để lặp qua các kết quả được trả về từ cơ sở dữ liệu. tiếng vang “ $row->customer_name ”; in customer_name từ cơ sở dữ liệu

Trước khi tải URL sau, bạn có thể tải thêm một vài bản ghi vào cơ sở dữ liệu.

Bây giờ hãy xác định tuyến đường cho truy vấn CHỌN

Mở bảng ứng dụng/config/routes.php

Thêm tuyến đường sau

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

ĐÂY,

  • Route ar trỏ đến phương thức chỉ mục của lớp ActiveRecordController. Theo mặc định, đây là lý do tại sao chúng tôi không chỉ định phương thức lập chỉ mục như bạn đã làm cho tuyến đường chèn bản ghi

Giả sử máy chủ web đã chạy, hãy tải URL sau

http://localhost:3000/ar

Bạn sẽ có thể thấy kết quả rất giống với kết quả sau trong trình duyệt web của bạn

CodeIgniter Chọn Bản ghi Hoạt động

CodeIgniter Cập nhật bản ghi hoạt động

Trong phần này, chúng ta sẽ nói về cách sử dụng bản ghi đang hoạt động để cập nhật cơ sở dữ liệu. Giả sử chúng tôi muốn cập nhật tên khách hàng Joe Thomas thành Joe.

Thêm phương thức sau vào lớp 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';
    }

ĐÂY,

  • $data = […] xác định các trường và giá trị mà chúng ta muốn cập nhật trong bảng cơ sở dữ liệu
  • $this->db->where('id', 1); đặt mệnh đề Where của truy vấn cập nhật
  • $this->db->update('orders', $data); tạo truy vấn cập nhật SQL và thực thi nó dựa trên cơ sở dữ liệu của chúng tôi.

Đoạn mã trên sẽ tạo ra câu lệnh SQL sau

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

Bây giờ chúng ta hãy cập nhật ứng dụng Routes.php/config/routes.php

Thêm tuyến đường sau

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

Lưu các thay đổi

Tải URL sau vào trình duyệt web

CodeIgniter Cập nhật bản ghi hoạt động

Bây giờ chúng ta hãy hiển thị các bản ghi cơ sở dữ liệu và xem liệu những thay đổi có bị ảnh hưởng hay không.

CodeIgniter Cập nhật bản ghi hoạt động

Như bạn có thể thấy trong Hình ảnh trên, bản ghi đầu tiên đã được cập nhật từ Joe Thomas thành Joe.

CodeIgniter Xóa bản ghi hoạt động

Bây giờ chúng ta sẽ xóa một bản ghi khỏi cơ sở dữ liệu. Chúng tôi sẽ xóa bản ghi có id là 3.

Thêm phương thức sau vào ActiveRecordController

public function delete_order() {
        $this->db->where('id', 3);
        $this->db->delete('orders');

        echo 'order has successfully been deleted';
    }

ĐÂY,

  • $this->db->where('id', 1); đặt mệnh đề Where
  • $this->db->delete('orders'); xóa hàng cơ sở dữ liệu trong bảng đơn hàng dựa trên bộ tiêu chí bằng mệnh đề Where.

Để thực thi mã trên, hãy tải URL sau vào trình duyệt web của chúng tôi

http://localhost:3000/ar/delete

Tổng kết

Trong hướng dẫn này, bạn đã học cách làm việc với một bản ghi đang hoạt động để chèn, cập nhật, xóa và chọn bản ghi từ cơ sở dữ liệu. Chúng tôi đã làm việc với các giá trị tĩnh để tạo bản ghi, cập nhật và xóa. Trong hướng dẫn tiếp theo, chúng ta sẽ tạo một giao diện người dùng mà người dùng có thể sử dụng để tạo các bản ghi động trong cơ sở dữ liệu.