Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Laravel timestamps para mostrar milissegundos


Você não pode porque o driver PHP PDO não suporta segundos fracionários em timestamps. Uma solução é selecionar o timestamp como uma string para que o driver PDO não saiba que é realmente um timestamp, simplesmente fazendo $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column")) no entanto, isso significa que você não pode usar a seleção padrão para todos os campos, então a consulta se torna uma verdadeira dor. Além disso, você precisa substituir getDateFormat no modelo.
// override to include micro seconds when dates are put into mysql.
protected function getDateFormat()
{
    return 'Y-m-d H:i:s.u';
}

Finalmente, em sua migração, em vez de nullableTimestamps, fora do callback do Schema, faça:
DB::statement("ALTER TABLE `$tableName` ADD COLUMN created_at TIMESTAMP(3) NULL");

Observe que este exemplo foi para 3 casas decimais, mas você pode ter até 6 se quiser, alterando o 3 para 6 em duas casas, na alter table e no sprintf e também ajustando o multiplicador * 1000 para 1000000 para 6.

Espero que algum dia o PHP PDO seja atualizado para corrigir isso, mas já faz mais de 5 anos e nada mudou, então não tenho esperanças. Caso você esteja interessado nos detalhes, veja este relatório de bug:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields Encontrei esse link nesta outra resposta que pode ajudá-lo a entender melhor o problema:https://stackoverflow. com/a/22990991/259521

O PHP está realmente mostrando sua idade ultimamente, e eu consideraria esse problema uma das minhas razões para considerar a mudança para o Node.js mais moderno.