Anda tidak bisa karena driver PHP PDO tidak mendukung pecahan detik dalam stempel waktu. Solusinya adalah memilih stempel waktu sebagai string sehingga driver PDO tidak tahu stempel waktu yang sebenarnya, cukup dengan melakukan $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column"))
namun ini berarti Anda tidak dapat menggunakan pemilihan default untuk semua bidang sehingga kueri menjadi sangat merepotkan. Anda juga perlu mengganti getDateFormat pada model.
// override to include micro seconds when dates are put into mysql.
protected function getDateFormat()
{
return 'Y-m-d H:i:s.u';
}
Akhirnya dalam migrasi Anda daripada nullableTimestamps, di luar callback Skema lakukan:
DB::statement("ALTER TABLE `$tableName` ADD COLUMN created_at TIMESTAMP(3) NULL");
Perhatikan contoh ini untuk 3 tempat desimal namun Anda dapat memiliki hingga 6 jika Anda suka, dengan mengubah 3 menjadi 6 di dua tempat, di tabel alter dan di sprintf dan juga menyesuaikan pengali * 1000 hingga 1000000 untuk 6.
Mudah-mudahan suatu hari PHP PDO akan diperbarui untuk memperbaikinya, tetapi sudah lebih dari 5 tahun dan tidak ada yang berubah jadi saya tidak terlalu berharap. Jika Anda tertarik dengan detailnya, lihat laporan bug ini:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields Saya menemukan tautan itu di jawaban lain ini yang mungkin membantu Anda lebih memahami masalah ini:https://stackoverflow. com/a/22999991/259521
PHP benar-benar menunjukkan usianya akhir-akhir ini, dan saya akan menganggap masalah ini sebagai salah satu alasan saya untuk mempertimbangkan pindah ke Node.js yang lebih modern.