1, 'name' => 'Nguyễn Văn An', 'email' => 'an.nguyen@example.com', 'age' => 20, 'gender' => 'male'], ['id' => 2, 'name' => 'Trần Thị Bích Ngọc', 'email' => 'ngoc.tran@example.com', 'age' => 19, 'gender' => 'female'], ['id' => 3, 'name' => 'Lê Hoàng Nam', 'email' => 'nam.le@example.com', 'age' => 17, 'gender' => 'male'], ['id' => 4, 'name' => 'Phạm Minh Châu', 'email' => 'chau.pham@example.com', 'age' => 21, 'gender' => 'female'], ['id' => 5, 'name' => 'Hoàng Đức Trọng', 'email' => 'trong.hoang@example.com', 'age' => 22, 'gender' => 'male'], ]; // 2. Nguồn dữ liệu CSDL (Eloquent ORM / MySQL) $dbStudents = []; $dbError = null; try { $pdo = getPdoConnection(); $pdo->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', `class_name` VARCHAR(50) NULL DEFAULT 'CNTT-K18A', `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; "); $count = (int) $pdo->query("SELECT COUNT(*) FROM `students`")->fetchColumn(); if ($count === 0) { $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()); "); } $dbStudents = $pdo->query("SELECT * FROM `students` ORDER BY `id` ASC")->fetchAll(); } catch (Throwable $e) { $dbError = $e->getMessage(); } $controllerCode = is_file(__DIR__ . '/../app/Http/Controllers/StudentController.php') ? file_get_contents(__DIR__ . '/../app/Http/Controllers/StudentController.php') : ''; ?> Bài 05 - Giao diện 2 Tab so sánh Mảng tĩnh (Array) & CSDL (Eloquent) | Lab 06
BÀI TẬP 05

So sánh 2 nguồn dữ liệu: "Mảng tĩnh (Array)" và "CSDL (Eloquent)"

Xây dựng giao diện 2 Tab chuyển đổi trực tiếp để đối chiếu sự khác biệt giữa dữ liệu khai báo cứng bằng mảng PHP (Bài 03) và dữ liệu động truy vấn từ MySQL thông qua Eloquent Model Student::all() (Bài 04).

Nguồn 1: Mảng tĩnh PHP (Hard-coded Array)
Dữ liệu cố định trong StudentController::getStaticStudents(), không lưu trữ lâu dài khi thêm/sửa/xóa.
PHP Array
#ID Họ và tên Email Tuổi Giới tính Kiểu phần tử
# array['key']
Nguồn 2: Cơ sở dữ liệu MySQL (Eloquent ORM)
Truy vấn qua Student::orderBy('id', 'asc')->get(), tự động ánh xạ từng dòng thành đối tượng Model App\Models\Student.
Eloquent Collection
#ID Họ và tên Email Tuổi Giới tính Kiểu phần tử
# $student->property
File app/Http/Controllers/StudentController.php