Laravel les horodatages pour afficher les millisecondes
J'ai besoin de stocker updated_at timestamp avec une grande précision sur une application laravel, en utilisant le format "m-d-Y H:i:s.u" (y compris milisseconds)
Selon laravel de la documentation, je peux personnaliser le format de date par la mise en au $dateFormat de la propriété à une classe, mais...
Le principal problème est que Laravel du générateur de schéma ajoute une colonne de type timestamp dans la base de données lorsque j'utilise $table->nullableTimestamps() Et selon la documentation de mysql, les colonnes de type TIMESTAMP permettent seulement de la précision à la seconde..
Des idées sur comment je pourrais parvenir?
Avez-vous essayé avec des mutateurs ? Quelque chose comme ceci
OriginalL'auteur raphadko | 2015-07-05
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas parce que le PHP PDO pilote ne prend pas en charge les fractions de secondes dans les horodateurs. Un travail autour de est de sélectionner le timestamp comme une chaîne de caractères à la place de sorte que le driver PDO ne sais pas vraiment un timestamp, 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 valeur par défaut pour sélectionner tous les champs afin que l'interrogation devient une vraie douleur. Aussi vous avez besoin pour remplacer un ou deux autres timestamp liées à des méthodes sur le modèle.Enfin dans votre migration plutôt que de nullableTimestamps, en dehors du Schéma de rappel n':
Remarque: cet exemple a été pour la 3e décimale cependant, vous pouvez avoir jusqu'à 6 si vous le souhaitez, par la modification de la 3 à la 6 en deux endroits, dans l'instruction alter table et dans le sprintf et également ajuster le multiplicateur * 1000 1000000 pour 6.
J'espère que quelques jours PHP PDO sera mis à jour pour corriger ce problème, mais sa fait plus de 5 ans et rien changé donc je n'ai pas mes espoirs. Dans le cas où vous êtes intéressé par les détails, voir ce rapport de bug:
http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format-of-datetime-fields
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 est vraiment à montrer son âge, dernièrement, et j'en tiendrait compte de cette question l'une de mes raisons pour envisager de déménager au plus moderne Node.js.
OriginalL'auteur malhal
Basé sur malhal réponse, j'ai été en mesure d'obtenir les fractions d'horodatage de lecture pour travailler ici. Coller la réponse ici pour plus de commodité:
Il se passe beaucoup de choses ici, car il reçoit la requête avec des étendues appliquée, puis ajoute un select pour le updated_at colonne à la fin, qui remplace celle précédemment chargé updated_at colonne plus tard, alors que Laravel hydrate le Modèle de la requête. Pour être un vilain hack, il a travaillé en est bien la première fois.
Les horodatages sont stockées en interne De carbone dans Laravel:
De sortie:
Aussi assurez-vous d'exécuter une migration pour convertir vos colonnes pour les fractions d'horodateurs. Microseconde précision soulève la taille de l'horodatage de 4 octets à 7 octets, mais c'est en 2017, ne laissez pas l'enregistrement d'un octet ou deux par le choix de la précision à la milliseconde vous coûter une fortune plus tard, quand vous vous trouvez servir obsolètes les entrées du cache:
Malheureusement je n'ai pas trouvé un moyen de modifier la migration de schéma
timestamps()
fonction pour ce faire.OriginalL'auteur Zack Morris