DateTime và Timestamp Trong Laravel
Đọc lý thuyết về TIMESTAMP và DATETIME là một chuyện, nhưng tận mắt thấy hai kiểu cột này cư xử khác nhau như thế nào khi đi qua Laravel Eloquent — từ lúc insert bằng SQL thô, đến lúc Model trả nó ra JSON — lại là một trải nghiệm rất khác. Bài lab này dựng một bảng orders tối giản với đúng một cột TIMESTAMP và một cột DATETIME, rồi lần lượt quan sát: dữ liệu trong DB, giá trị Eloquent attribute khi có và không có $casts, và cuối cùng là format JSON mà Frontend thực sự nhận được.
Mục tiêu không phải để chứng minh cột nào "tốt hơn", mà để thấy rõ bằng thực nghiệm: $casts = ['field' => 'datetime'] thay đổi điều gì, và quan trọng hơn — nó không thay đổi điều gì. Đây chính là điểm rất nhiều Developer hiểu nhầm khi debug bug timezone trong thực tế.
Yêu Cầu
Để làm theo lab này, cần có:
- MySQL/MariaDB với quyền tạo database, table.
- Một project Laravel bất kỳ (đã có thể chạy
php artisan tinker). - Laravel Eloquent cơ bản: Model,
$casts, Controller, Route.
Bước 1: Tạo Database Và Kiểm Tra Timezone
Trước khi tạo bảng, tạo một database riêng cho lab và xác nhận session đang ở timezone nào — đây là bước không nên bỏ qua vì toàn bộ kết quả bên dưới phụ thuộc vào timezone của session tại thời điểm insert:
CREATE DATABASE timezone_demo
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE timezone_demo;
SELECT
@@global.time_zone AS global_timezone,
@@session.time_zone AS session_timezone,
NOW() AS now_value,
UTC_TIMESTAMP() AS utc_now;
Trong lab này, giả sử database session timezone là UTC. Nếu chưa đúng, set lại session hiện tại:
SET time_zone = '+00:00';
Yêu cầu đăng nhập
Vui lòng đăng nhập để truy cập nội dung này
Additional Resources
Course Guide
Comprehensive PDF guide with examples
GitHub Repository
Example code for all lessons
Discussion
Have a question about this lesson? Post it here and get answers from instructors and peers.
