Seeders: Tạo dữ liệu mẫu trong CakePHP
Seeder trong CakePHP là công cụ hữu ích để tạo dữ liệu mẫu, phục vụ việc phát triển và kiểm thử ứng dụng mà không cần nhập liệu thủ công. Plugin Migrations hỗ trợ Seeders để giúp bạn tự động chèn dữ liệu vào cơ sở dữ liệu.

1. Cài đặt Migrations Plugin
Trước tiên, đảm bảo plugin Migrations đã được cài đặt. Nếu chưa, cài đặt bằng lệnh:
composer require cakephp/migrations
Tiếp theo, kích hoạt plugin trong src/Application.php
:
$this->addPlugin('Migrations');
2. Tạo Seeder
Sử dụng lệnh sau để tạo một Seeder mới:
bin/cake bake seed SeederName
Ví dụ: Tạo Seeder để chèn dữ liệu mẫu vào bảng users
:
bin/cake bake seed UsersSeeder
Lệnh này sẽ tạo file Seeder trong thư mục config/Seeds/
.
3. Định nghĩa dữ liệu mẫu trong Seeder
Mở file Seeder vừa tạo, ví dụ: UsersSeeder.php
, và thêm dữ liệu mẫu.
Ví dụ: Seeder cho bảng users
use Migrations\AbstractSeed;
class UsersSeeder extends AbstractSeed
{
public function run()
{
$data = [
[
'id' => 1,
'username' => 'admin',
'email' => 'admin@example.com',
'password' => password_hash('password123', PASSWORD_DEFAULT),
'role' => 'admin',
'created' => date('Y-m-d H:i:s'),
'modified' => date('Y-m-d H:i:s'),
],
[
'id' => 2,
'username' => 'user1',
'email' => 'user1@example.com',
'password' => password_hash('password123', PASSWORD_DEFAULT),
'role' => 'user',
'created' => date('Y-m-d H:i:s'),
'modified' => date('Y-m-d H:i:s'),
],
];
$table = $this->table('users');
$table->insert($data)->save();
}
}
Giải thích:
-
$data
: Là mảng chứa dữ liệu mẫu. -
$this->table('users')
: Xác định bảng cần chèn dữ liệu. -
insert($data)->save()
: Chèn dữ liệu vào bảng.
4. Chạy Seeder
Để chạy Seeder, sử dụng lệnh:
bin/cake migrations seed --seed UsersSeeder
Chạy tất cả Seeders
Nếu muốn chạy toàn bộ Seeders trong thư mục config/Seeds/
, sử dụng lệnh:
bin/cake migrations seed
5. Tạo Seeder cho nhiều bảng
Bạn có thể tạo Seeder cho nhiều bảng cùng lúc và chạy toàn bộ Seeders.
Ví dụ: Seeder cho bảng articles
Tạo Seeder:
bin/cake bake seed ArticlesSeeder
Mở file ArticlesSeeder.php
và thêm dữ liệu mẫu:
use Migrations\AbstractSeed;
class ArticlesSeeder extends AbstractSeed
{
public function run()
{
$data = [
[
'id' => 1,
'title' => 'Bài viết đầu tiên',
'body' => 'Nội dung bài viết đầu tiên.',
'created' => date('Y-m-d H:i:s'),
'modified' => date('Y-m-d H:i:s'),
],
[
'id' => 2,
'title' => 'Bài viết thứ hai',
'body' => 'Nội dung bài viết thứ hai.',
'created' => date('Y-m-d H:i:s'),
'modified' => date('Y-m-d H:i:s'),
],
];
$table = $this->table('articles');
$table->insert($data)->save();
}
}
Chạy Seeder cho cả hai bảng users
và articles
:
bin/cake migrations seed
6. Xóa dữ liệu Seeder
Nếu muốn xóa dữ liệu được chèn bởi Seeder, bạn cần chạy lệnh rollback hoặc xóa dữ liệu thủ công bằng SQL.
7. Kiểm tra dữ liệu trong cơ sở dữ liệu
Sau khi chạy Seeder, bạn có thể kiểm tra dữ liệu đã được chèn bằng cách sử dụng công cụ quản lý cơ sở dữ liệu (như phpMyAdmin) hoặc chạy truy vấn SQL:
SELECT * FROM users;
SELECT * FROM articles;
8. Ví dụ thực tế
Kết hợp nhiều Seeder:
Bạn có thể quản lý nhiều Seeder trong một file chính, ví dụ:
use Migrations\AbstractSeed;
class MainSeeder extends AbstractSeed
{
public function run()
{
$this->call('UsersSeeder');
$this->call('ArticlesSeeder');
}
}
Chạy file MainSeeder
:
bin/cake migrations seed --seed MainSeeder
Kết luận
- Seeders giúp tự động hóa việc tạo dữ liệu mẫu, tiết kiệm thời gian nhập liệu thủ công.
- Tạo dữ liệu mẫu dễ dàng bằng cách định nghĩa trong các file Seeder và chạy lệnh phù hợp.
- Kết hợp với Migrations, Seeder là công cụ quan trọng để phát triển và kiểm thử ứng dụng hiệu quả.

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