Bạn không thể vì trình điều khiển PHP PDO không hỗ trợ giây phân số trong dấu thời gian. Một công việc xung quanh là chọn dấu thời gian dưới dạng chuỗi thay vì vậy trình điều khiển PDO không biết nó thực sự là dấu thời gian, đơn giản bằng cách thực hiện $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column"))
tuy nhiên, điều này có nghĩa là bạn không thể sử dụng lựa chọn mặc định cho tất cả các trường nên việc truy vấn trở thành một vấn đề thực sự. Ngoài ra, bạn cần ghi đè getDateFormat trên mô hình.
// override to include micro seconds when dates are put into mysql.
protected function getDateFormat()
{
return 'Y-m-d H:i:s.u';
}
Cuối cùng trong quá trình di chuyển của bạn thay vì nullableTimestamps, bên ngoài lệnh gọi lại Lược đồ, hãy thực hiện:
DB::statement("ALTER TABLE `$tableName` ADD COLUMN created_at TIMESTAMP(3) NULL");
Lưu ý rằng ví dụ này dành cho 3 chữ số thập phân, tuy nhiên bạn có thể có tối đa 6 nếu muốn, bằng cách thay đổi 3 thành 6 ở hai vị trí, trong bảng thay thế và trong sprintf và cũng điều chỉnh hệ số nhân * 1000 thành 1000000 cho 6.
Hy vọng một ngày nào đó PHP PDO sẽ được cập nhật để sửa lỗi này, nhưng nó đã hơn 5 năm và không có gì thay đổi nên tôi không có hy vọng. Trong trường hợp bạn quan tâm đến chi tiết, hãy xem báo cáo lỗi này: http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields Tôi đã tìm thấy liên kết đó trong câu trả lời khác có thể giúp bạn hiểu thêm về vấn đề: https:// stackoverflow. com / a / 22990991/259521
Gần đây PHP đang thực sự cho thấy tuổi của nó, và tôi coi vấn đề này là một trong những lý do để xem xét chuyển sang Node.js hiện đại hơn.