Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Laravel-Zeitstempel zur Anzeige von Millisekunden

Sie können nicht, weil der PHP-PDO-Treiber Sekundenbruchteile in Zeitstempeln nicht unterstützt. Eine Problemumgehung besteht darin, den Zeitstempel stattdessen als Zeichenfolge auszuwählen, damit der PDO-Treiber nicht weiß, dass es sich wirklich um einen Zeitstempel handelt, indem Sie einfach $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column")) Dies bedeutet jedoch, dass Sie die Standardauswahl nicht für alle Felder verwenden können, sodass das Abfragen zu einem echten Problem wird. Außerdem müssen Sie getDateFormat für das Modell überschreiben.

// override to include micro seconds when dates are put into mysql.
protected function getDateFormat()
{
    return 'Y-m-d H:i:s.u';
}

Schließlich in Ihrer Migration statt nullableTimestamps, außerhalb des Schema-Callbacks:

DB::statement("ALTER TABLE `$tableName` ADD COLUMN created_at TIMESTAMP(3) NULL");

Beachten Sie, dass dieses Beispiel für 3 Dezimalstellen war, aber Sie können bis zu 6 haben, wenn Sie möchten, indem Sie die 3 an zwei Stellen in eine 6 ändern, in der Alter-Tabelle und im Sprintf und auch den Multiplikator * 1000 auf 1000000 für 6 anpassen.

Hoffentlich wird PHP PDO eines Tages aktualisiert, um dies zu beheben, aber es ist über 5 Jahre her und nichts hat sich geändert, also habe ich keine Hoffnungen. Falls Sie an den Details interessiert sind, sehen Sie sich diesen Fehlerbericht an:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields Ich habe diesen Link in dieser anderen Antwort gefunden, der Ihnen helfen könnte, das Problem besser zu verstehen:https://stackoverflow. com/a/22990991/259521

PHP ist in letzter Zeit wirklich in die Jahre gekommen, und ich würde dieses Problem als einen meiner Gründe betrachten, auf das modernere Node.js umzusteigen.