Nemůžete, protože ovladač PHP PDO nepodporuje zlomky sekund v časových razítkách. Problém lze obejít tak, že místo toho vyberete časové razítko jako řetězec, aby ovladač PDO neznal jeho skutečné časové razítko, jednoduše provedením $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column"))
to však znamená, že nemůžete použít výchozí výběr pro všechna pole, takže dotazování se stává skutečnou bolestí. Také musíte u modelu přepsat getDateFormat.
// override to include micro seconds when dates are put into mysql.
protected function getDateFormat()
{
return 'Y-m-d H:i:s.u';
}
Nakonec ve vaší migraci, nikoli nullableTimestamps, mimo zpětné volání schématu proveďte:
DB::statement("ALTER TABLE `$tableName` ADD COLUMN created_at TIMESTAMP(3) NULL");
Všimněte si, že tento příklad byl na 3 desetinná místa, ale můžete jich mít až 6, pokud chcete, změnou 3 na 6 na dvou místech, v alter tabulce a ve sprintf a také úpravou násobitele * 1000 až 1000000 pro 6.
Doufejme, že jednoho dne bude PHP PDO aktualizováno, aby to napravilo, ale už je to více než 5 let a nic se nezměnilo, takže si nedělám žádné naděje. V případě, že vás zajímají podrobnosti, podívejte se na toto hlášení o chybě:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields Našel jsem tento odkaz v této další odpovědi, který vám může pomoci lépe porozumět problému:https://stackoverflow. com/a/22990991/259521
PHP v poslední době skutečně ukazuje svůj věk a tento problém bych považoval za jeden z důvodů, proč zvažuji přechod na modernější Node.js.