exec("
CREATE TABLE IF NOT EXISTS `students` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL UNIQUE,
`age` INT UNSIGNED NOT NULL DEFAULT 18,
`gender` ENUM('male', 'female') NOT NULL DEFAULT 'male',
`created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
");
// Tự động kiểm tra và ALTER TABLE bổ sung cột class_name nếu chưa có
$colCheck = $pdo->query("SHOW COLUMNS FROM `students` LIKE 'class_name'")->fetch();
if (!$colCheck) {
$pdo->exec("ALTER TABLE `students` ADD COLUMN `class_name` VARCHAR(50) NULL DEFAULT 'CNTT-K18A' AFTER `gender`");
$alterMsg = 'Đã thực thi ALTER TABLE bổ sung cột `class_name` vào bảng `students` thành công!';
}
// Seed hoặc cập nhật lại class_name khi người dùng bấm nút hoặc bảng trống
$count = (int) $pdo->query("SELECT COUNT(*) FROM `students`")->fetchColumn();
if ($count === 0 || isset($_POST['run_migrate_seed'])) {
$pdo->exec("
INSERT IGNORE INTO `students` (`id`, `name`, `email`, `age`, `gender`, `class_name`, `created_at`, `updated_at`) VALUES
(1, 'Nguyễn Văn An', 'an.nguyen@example.com', 20, 'male', 'CNTT-K18A', NOW(), NOW()),
(2, 'Trần Thị Bích Ngọc', 'ngoc.tran@example.com', 19, 'female', 'CNTT-K18A', NOW(), NOW()),
(3, 'Lê Hoàng Nam', 'nam.le@example.com', 17, 'male', 'KTPM-K19B', NOW(), NOW()),
(4, 'Phạm Minh Châu', 'chau.pham@example.com', 21, 'female', 'HTTT-K17A', NOW(), NOW()),
(5, 'Hoàng Đức Trọng', 'trong.hoang@example.com', 22, 'male', 'CNTT-K18B', NOW(), NOW()),
(6, 'Vũ Thị Mai Hương', 'huong.vu@example.com', 17, 'female', 'KTPM-K19A', NOW(), NOW()),
(7, 'Đặng Quốc Khánh', 'khanh.dang@example.com', 20, 'male', 'ANM-K18A', NOW(), NOW()),
(8, 'Bùi Thanh Hà', 'ha.bui@example.com', 19, 'female', 'CNTT-K18A', NOW(), NOW()),
(9, 'Đỗ Gia Bảo', 'bao.do@example.com', 16, 'male', 'KTPM-K19B', NOW(), NOW()),
(10, 'Ngô Phương Linh', 'linh.ngo@example.com', 21, 'female', 'HTTT-K17A', NOW(), NOW());
");
$pdo->exec("UPDATE `students` SET `class_name` = 'CNTT-K18A' WHERE `id` IN (1, 2, 8)");
$pdo->exec("UPDATE `students` SET `class_name` = 'KTPM-K19B' WHERE `id` IN (3, 9)");
$pdo->exec("UPDATE `students` SET `class_name` = 'HTTT-K17A' WHERE `id` IN (4, 10)");
$pdo->exec("UPDATE `students` SET `class_name` = 'CNTT-K18B' WHERE `id` = 5");
$pdo->exec("UPDATE `students` SET `class_name` = 'KTPM-K19A' WHERE `id` = 6");
$pdo->exec("UPDATE `students` SET `class_name` = 'ANM-K18A' WHERE `id` = 7");
if (isset($_POST['run_migrate_seed'])) {
$alterMsg = 'Đã chạy lại Migration & StudentSeeder cập nhật cột `class_name` cho toàn bộ sinh viên!';
}
}
$columns = $pdo->query("SHOW COLUMNS FROM `students`")->fetchAll();
$students = $pdo->query("SELECT * FROM `students` ORDER BY `id` ASC")->fetchAll();
} catch (Throwable $e) {
$dbError = $e->getMessage();
}
$migrationCode = is_file(__DIR__ . '/../database/migrations/2026_01_01_000002_add_class_name_to_students_table.php')
? file_get_contents(__DIR__ . '/../database/migrations/2026_01_01_000002_add_class_name_to_students_table.php')
: '';
$sqlCode = is_file(__DIR__ . '/add_class_name.sql')
? file_get_contents(__DIR__ . '/add_class_name.sql')
: '';
?>
Bài 09 - Migration bổ sung cột class_name & Seed lại dữ liệu | Lab 06
BÀI TẬP 09
Tạo Migration mới bổ sung cột class_name & Seed lại dữ liệu
Sử dụng lệnh php artisan make:migration add_class_name_to_students_table --table=students để thêm cột class_name mà không làm mất dữ liệu hiện có.
= htmlspecialchars($dbError) ?>
= htmlspecialchars($alterMsg) ?>
-
-
| Field |
Type |
Default |
= htmlspecialchars($col['Field']) ?> |
= htmlspecialchars($col['Type']) ?> |
= htmlspecialchars((string) ($col['Default'] ?? 'NULL')) ?> |
| #ID |
Họ và tên |
Email |
Tuổi |
Giới tính |
Lớp (class_name) |
| #= (int) $st['id'] ?> |
= htmlspecialchars($st['name']) ?> |
= htmlspecialchars($st['email']) ?> |
= (int) $st['age'] ?> |
= $st['gender'] === 'male' ? 'Nam' : 'Nữ' ?> |
= htmlspecialchars((string) ($st['class_name'] ?? 'CNTT-K18A')) ?>
|
1. Migration 2026_01_01_000002_add_class_name_to_students_table.php
= htmlspecialchars($migrationCode) ?>
2. SQL tương đương Bai09/add_class_name.sql
= htmlspecialchars($sqlCode) ?>