sql >> Base de Datos >  >> RDS >> Mysql

Marcas de tiempo de Laravel para mostrar milisegundos

No puede porque el controlador PHP PDO no admite segundos fraccionarios en las marcas de tiempo. Una solución es seleccionar la marca de tiempo como una cadena para que el controlador PDO no sepa que es realmente una marca de tiempo, simplemente haciendo $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column")) sin embargo, esto significa que no puede usar la selección predeterminada para todos los campos, por lo que consultar se convierte en un verdadero dolor de cabeza. También debe anular getDateFormat en el modelo.

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

Finalmente, en su migración en lugar de marcas de tiempo anulables, fuera de la devolución de llamada del esquema, haga:

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

Tenga en cuenta que este ejemplo fue para 3 decimales, sin embargo, puede tener hasta 6 si lo desea, cambiando el 3 por un 6 en dos lugares, en la tabla alter y en el sprintf y también ajustando el multiplicador * 1000 a 1000000 para 6.

Con suerte, algún día PHP PDO se actualizará para solucionar esto, pero han pasado más de 5 años y nada ha cambiado, así que no tengo muchas esperanzas. En caso de que esté interesado en los detalles, consulte este informe de error:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -de-campos-de-fecha-hora Encontré ese enlace en esta otra respuesta que podría ayudarlo a comprender mejor el problema:https://stackoverflow. com/a/22990991/259521

PHP realmente está mostrando su edad últimamente, y consideraría este problema como una de mis razones para considerar cambiarme al Node.js más moderno.