Nie możesz, ponieważ sterownik PHP PDO nie obsługuje ułamków sekund w znacznikach czasu. Rozwiązaniem jest wybranie znacznika czasu jako ciągu znaków, aby sterownik PDO nie znał jego rzeczywistego znacznika czasu, po prostu wykonując $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column"))
oznacza to jednak, że nie można użyć domyślnego wyboru dla wszystkich pól, więc wykonywanie zapytań staje się prawdziwym problemem. Musisz także nadpisać getDateFormat w modelu.
// override to include micro seconds when dates are put into mysql.
protected function getDateFormat()
{
return 'Y-m-d H:i:s.u';
}
Wreszcie w migracji zamiast nullableTimestamps, poza wywołaniem zwrotnym schematu wykonaj:
DB::statement("ALTER TABLE `$tableName` ADD COLUMN created_at TIMESTAMP(3) NULL");
Zauważ, że ten przykład dotyczył 3 miejsc po przecinku, jednak możesz mieć do 6, jeśli chcesz, zmieniając 3 na 6 w dwóch miejscach, w tabeli alter i w sprintf, a także dostosowując mnożnik * 1000 do 1000000 dla 6.
Mam nadzieję, że pewnego dnia PHP PDO zostanie zaktualizowane, aby to naprawić, ale minęło już ponad 5 lat i nic się nie zmieniło, więc nie mam nadziei. Jeśli jesteś zainteresowany szczegółami, zobacz ten raport o błędzie:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields Znalazłem ten link w tej innej odpowiedzi, który może pomóc ci lepiej zrozumieć problem:https://stackoverflow. com/a/22990991/259521
PHP naprawdę pokazuje swój wiek ostatnio i uważam ten problem za jeden z moich powodów, aby rozważyć przejście na bardziej nowoczesny Node.js.