Du kan inte eftersom PHP PDO-drivrutinen inte stöder bråkdelar av sekunder i tidsstämplar. En lösning är att välja tidsstämpeln som en sträng istället så att PDO-drivrutinen inte vet att det verkligen är en tidsstämpel, helt enkelt genom att göra $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column"))
Detta betyder dock att du inte kan använda standardval för alla fält, så att fråga blir jobbigt. Du måste också åsidosätta getDateFormat på modellen.
// override to include micro seconds when dates are put into mysql.
protected function getDateFormat()
{
return 'Y-m-d H:i:s.u';
}
Slutligen i din migrering snarare än nullableTimestamps, utanför Schema callback gör:
DB::statement("ALTER TABLE `$tableName` ADD COLUMN created_at TIMESTAMP(3) NULL");
Observera att det här exemplet gällde 3 decimaler men du kan ha upp till 6 om du vill, genom att ändra 3:an till en 6:a på två ställen, i altertabellen och i sprintf och även justera multiplikatorn * 1000 till 1000000 för 6.
Förhoppningsvis kommer PHP PDO en dag att uppdateras för att fixa detta, men det har gått över 5 år och ingenting har förändrats så jag har inte mina förhoppningar. Om du är intresserad av detaljerna, se denna felrapport:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields Jag hittade den länken i det här andra svaret som kan hjälpa dig att förstå problemet bättre:https://stackoverflow. com/a/22990991/259521
PHP har verkligen visat sin ålder på sistone, och jag skulle betrakta det här problemet som ett av mina skäl till att överväga att flytta till den modernare Node.js.