Site logo

DateTime và Timestamp Trong Laravel

5:00 read

Đọ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.