Seeders: Tạo dữ liệu mẫu trong CakePHP

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 19 tháng 1, 2025

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 usersarticles:

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ả.
Website Logo

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.

Bình luận

Website Logo

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

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ