Mysql
 sql >> Base de données >  >> RDS >> Mysql

Horodatages Laravel pour afficher les millisecondes

Vous ne pouvez pas car le pilote PHP PDO ne prend pas en charge les fractions de secondes dans les horodatages. Une solution consiste à sélectionner l'horodatage sous forme de chaîne à la place afin que le pilote PDO ne sache pas qu'il s'agit vraiment d'un horodatage, simplement en faisant $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column")) Cependant, cela signifie que vous ne pouvez pas utiliser la sélection par défaut pour tous les champs, de sorte que l'interrogation devient un véritable casse-tête. Vous devez également remplacer getDateFormat sur le modèle.

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

Enfin, dans votre migration plutôt que nullableTimestamps, en dehors du rappel du schéma, faites :

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

Notez que cet exemple était pour 3 décimales, mais vous pouvez en avoir jusqu'à 6 si vous le souhaitez, en changeant le 3 en 6 à deux endroits, dans la table alter et dans le sprintf et en ajustant également le multiplicateur * 1000 à 1000000 pour 6.

J'espère qu'un jour PHP PDO sera mis à jour pour résoudre ce problème, mais cela fait plus de 5 ans et rien n'a changé, donc je n'ai plus d'espoir. Si vous êtes intéressé par les détails, consultez ce rapport de bogue :http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -des-champs-dateheure J'ai trouvé ce lien dans cette autre réponse qui pourrait vous aider à mieux comprendre le problème :https://stackoverflow. com/a/22990991/259521

PHP montre vraiment son âge ces derniers temps, et je considérerais ce problème comme l'une des raisons pour lesquelles j'envisage de passer au Node.js plus moderne.