Thiết Kế Cơ Sở Dữ Liệu và Tạo Migration
Sau khi hoàn tất cài đặt và chạy ứng dụng quản lý trả góp trong CakePHP, bước tiếp theo là thiết kế cơ sở dữ liệu và tạo migration cho hệ thống. Như vậy Migration trong CakePHP là gì? tại sao phải sử dụng nó? chúng ta cùng tìm hiểu nhé !
View DemoPhần 1 : Migration trong CakePHP là gì?

Migration trong CakePHP là một công cụ giúp chúng ta quản lý và theo dõi các thay đổi trong cấu trúc cơ sở dữ liệu. Thay vì tự tạo bảng hoặc chỉnh sửa cấu trúc bảng trực tiếp trên cơ sở dữ liệu, chúng ta có thể dùng Migration để lưu các thay đổi này dưới dạng mã. Điều này giúp cho việc quản lý cơ sở dữ liệu dễ dàng và hiệu quả hơn, đặc biệt là khi ứng dụng phát triển hoặc khi làm việc theo nhóm.
Tại sao cần sử dụng Migration?
- Quản lý thay đổi cơ sở dữ liệu dễ dàng: Khi ứng dụng phát triển, cơ sở dữ liệu thường phải thay đổi. Migration ghi lại lịch sử các thay đổi, giúp dễ dàng theo dõi và quản lý.
- Dễ dàng triển khai trên nhiều môi trường: Migration cho phép cập nhật cơ sở dữ liệu trên các môi trường phát triển, kiểm thử và sản xuất một cách đồng nhất chỉ bằng một lệnh.
- Hỗ trợ khôi phục trạng thái cơ sở dữ liệu: Migration giúp bạn quay về một trạng thái cơ sở dữ liệu trước đó nếu cần thiết.
- Hỗ trợ làm việc theo nhóm: Migration giúp mỗi thành viên cập nhật các thay đổi mới nhất mà không gây ra lỗi do phiên bản cơ sở dữ liệu không đồng nhất.
Seeding là gì ?

Trong CakePHP, seeding là quá trình chèn dữ liệu mẫu hoặc dữ liệu ban đầu vào cơ sở dữ liệu để hỗ trợ quá trình phát triển, thử nghiệm, hoặc chuẩn bị cho môi trường sản xuất. Việc seeding dữ liệu giúp tạo ra một tập dữ liệu cơ bản cho ứng dụng mà không cần nhập liệu thủ công, đặc biệt hữu ích khi bạn muốn có dữ liệu để kiểm thử chức năng mà ứng dụng sẽ sử dụng.
Mục đích của Seeding
- Kiểm thử và phát triển: Khi bạn phát triển một tính năng, dữ liệu seeding giúp bạn kiểm thử mà không phải nhập liệu thủ công mỗi lần.
- Tạo dữ liệu mẫu: Seeding cung cấp dữ liệu mẫu để hiển thị trên giao diện, đảm bảo các chức năng hiển thị hoạt động chính xác.
- Tái tạo dữ liệu dễ dàng: Khi bạn cần làm mới cơ sở dữ liệu trong quá trình phát triển, bạn chỉ cần chạy lại các seed file thay vì phải thêm từng bản ghi thủ công.
Phần 2 : Thiết kế bảng và Tạo Migration
Cấu Trúc Bảng Khoản Vay
Trong ứng dụng quản lý trả góp, bảng khoan_vay
sẽ bao gồm các trường:
- ten_khach_hang: Họ tên người trong hợp đồng vay.
- ngay_bat_dau: Ngày bắt đầu thanh toán khoản vay.
- ngay_nhan: Ngày nhận được tiền vay.
- so_tien: Số tiền vay.
- tong_so_lan_tra: Tổng số lần phải trả.
- so_lan_da_dong: Số lần đã đóng tính đến hiện tại.
Tạo Migration trong CakePHP
CakePHP hỗ trợ công cụ migration để quản lý cơ sở dữ liệu. Sau đây là các bước tạo migration cho bảng khoan_vay
với các trường cần thiết.
Bước 1: Tạo Migration File
Mở terminal và chạy lệnh sau để tạo một migration cho bảng khoản vay (khoan_vay)
bin/cake bake migration CreateKhoanVay ten_khach_hang:string ngay_bat_dau:date ngay_nhan:date so_tien:decimal[15,2] tong_so_lan_tra:integer so_lan_da_dong:integer
Giải thích:
-
CreateKhoanVay
: Tên của migration, chỉ ra rằng chúng ta tạo bảng khoan_vay. -
ten_khach_hang
: Trường lưu trữ tên khách hàng (kiểu string). -
ngay_bat_dau:date
: Trường lưu trữ ngày bắt đầu thanh toán (kiểu date). -
ngay_nhan:date
: Trường lưu trữ ngày nhận tiền vay (kiểu date). -
so_tien:decimal[15,2]
: Trường lưu số tiền vay, kiểu decimal với 15 chữ số và 2 chữ số thập phân. -
tong_so_lan_tra:integer
: Trường lưu tổng số lần phải trả. -
so_lan_da_dong:integer
: Trường lưu số lần đã đóng.
Bước 2: Kiểm Tra File Migration
Lệnh trên tạo ra một file migration trong thư mục config/Migrations
. Mở file này, bạn sẽ thấy mã như sau:
use Migrations\AbstractMigration;
class CreateKhoanVay extends AbstractMigration
{
/**
* Change Method.
*
* More information on this method is available here:
* https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
* @return void
*/
public function change(): void
{
$table = $this->table('khoan_vay');
$table->addColumn('ten_khach_hang', 'string', [
'default' => null,
'limit' => 255,
'null' => false,
]);
$table->addColumn('ngay_bat_dau', 'date', [
'default' => null,
'null' => false,
]);
$table->addColumn('ngay_nhan', 'date', [
'default' => null,
'null' => false,
]);
$table->addColumn('so_tien', 'decimal', [
'default' => null,
'null' => false,
'precision' => 15,
'scale' => 2,
]);
$table->addColumn('tong_so_lan_tra', 'integer', [
'default' => null,
'limit' => 11,
'null' => false,
]);
$table->addColumn('so_lan_da_dong', 'integer', [
'default' => null,
'limit' => 11,
'null' => false,
]);
$table->create();
}
}
Giải thích:
-
addColumn
thêm các cột vào bảng khoan_vay. -
null => true
cho phép trường có thể để trống (không bắt buộc). -
precision
vàscale
trongso_tien
xác định độ chính xác cho kiểudecimal
, lưu tối đa 15 chữ số với 2 chữ số thập phân.
Bước 3: Chạy Migration
Sau khi kiểm tra file migration, chạy lệnh sau để áp dụng migration, tạo bảng loans trong cơ sở dữ liệu:
bin/cake migrations migrate
Nếu thành công, bảng khoan_vay
sẽ được tạo trong cơ sở dữ liệu với các cột:
-
ten_khach_hang
-
ngay_bat_dau
-
ngay_nhan
-
so_tien
-
tong_so_lan_tra
-
so_lan_da_dong
Kiểm Tra Bảng Đã Tạo
Sau khi chạy lệnh, bạn có thể kiểm tra bảng khoan_vay
trong công cụ quản lý cơ sở dữ liệu (như phpMyAdmin hoặc MySQL Workbench) để đảm bảo rằng bảng đã được tạo đúng với cấu trúc mong muốn.
Trong cơ sở dữ liệu lúc này bạn sẽ thấy bảng khoan_vay
được tạo như sau:

Thực hiện Seeding Data
Bước 1: Cài Đặt Faker
Bạn cần cài đặt thư viện Faker nếu muốn seed dữ liệu ngẫu nhiên mà không cần phải cấu hình dữ liệu bằng tay
Trước tiên, cài đặt Faker bằng Composer:
composer require fakerphp/faker
Bước 2: Tạo File Seed cho Bảng khoan_vay
Tạo file seed bằng lệnh bake:
bin/cake bake seed KhoanVay
Bước 3: Cấu Hình Seed File với Dữ Liệu Ngẫu Nhiên
Mở file seed vừa tạo ra ở config/Seeds/KhoanVaySeed.php
và chỉnh sửa để thêm dữ liệu ngẫu nhiên với Faker.
Dưới đây là ví dụ về cách sử dụng Faker để tạo dữ liệu cho bảng khoan_vay với các trường bạn đã liệt kê:
use Migrations\AbstractSeed;
use Faker\Factory as Faker;
class KhoanVaySeed extends AbstractSeed
{
public function run() : void
{
// Xóa dữ liệu cũ trong bảng
$table = $this->table('khoan_vay');
$table->truncate();
// Khởi tạo Faker
$faker = Faker::create();
$data = [];
for ($i = 0; $i < 50; $i++) { // Số lượng bản ghi muốn tạo
// Tạo ngày nhận
$ngay_nhan = $faker->dateTimeBetween('-2 years', 'now');
// Xác định ngày bắt đầu là ngày đầu tiên của tháng kế tiếp
$ngay_bat_dau = (clone $ngay_nhan)->modify('first day of next month');
// Tạo tổng số lần trả
$tong_so_lan_tra = $faker->numberBetween(1, 60);
// Tạo số lần đã đóng sao cho không vượt quá tổng số lần trả
$so_lan_da_dong = $faker->numberBetween(0, $tong_so_lan_tra);
$data[] = [
'ten_khach_hang' => $faker->name, // Tên khách hàng ngẫu nhiên
'ngay_nhan' => $ngay_nhan->format('Y-m-d'),
'ngay_bat_dau' => $ngay_bat_dau->format('Y-m-d'),
'so_tien' => $faker->numberBetween(1, 100) * 1000000, // Số tiền ngẫu nhiên là bội số của 1 triệu
'tong_so_lan_tra' => $tong_so_lan_tra, // Tổng số lần trả
'so_lan_da_dong' => $so_lan_da_dong, // Số lần đã đóng không vượt quá tổng số lần trả
];
}
// Chèn dữ liệu vào bảng 'khoan_vay'
$table = $this->table('khoan_vay');
$table->insert($data)->save();
}
}
Bước 4: Chạy Seed để Tạo Dữ Liệu
Sau khi hoàn thành file seed, bạn có thể chạy lệnh sau để chèn dữ liệu vào bảng khoan_vay:
bin/cake migrations seed --seed KhoanVaySeed
Lệnh trên sẽ thêm 50 bản ghi ngẫu nhiên vào bảng khoan_vay như bên dưới:

Tổng Kết
Qua bài viết này, chúng ta đã tìm hiểu về khái niệm và lý do sử dụng Migration trong CakePHP, đồng thời tạo bảng khoan_vay
cho hệ thống quản lý khoản vay. Việc sử dụng migration giúp quản lý cơ sở dữ liệu hiệu quả hơn, hỗ trợ triển khai và bảo trì ứng dụng dễ dàng.
Ở bài viết tiếp theo, chúng ta sẽ tiếp tục với Xây Dựng Model và Controller Đầu Tiên để bắt đầu thao tác với dữ liệu trong bảng khoan_vay
.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com