Mysql
 sql >> Database >  >> RDS >> Mysql

Timestamp di Laravel per mostrare i millisecondi

Non è possibile perché il driver PHP PDO non supporta i secondi frazionari nei timestamp. Una soluzione consiste nel selezionare il timestamp come stringa invece in modo che il driver PDO non sappia che è davvero un timestamp, semplicemente facendo $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column")) tuttavia ciò significa che non puoi utilizzare la selezione predefinita per tutti i campi, quindi l'interrogazione diventa una vera seccatura. Inoltre devi sovrascrivere getDateFormat sul modello.

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

Infine nella tua migrazione piuttosto che in nullableTimestamps, al di fuori del callback Schema fai:

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

Nota che questo esempio era per 3 cifre decimali, tuttavia puoi avere fino a 6 se lo desideri, cambiando il 3 in un 6 in due posti, nella tabella alter e nello sprintf e regolando anche il moltiplicatore * da 1000 a 1000000 per 6.

Si spera che un giorno PHP PDO venga aggiornato per risolvere questo problema, ma sono passati più di 5 anni e non è cambiato nulla, quindi non ho le mie speranze. Se sei interessato ai dettagli, consulta questa segnalazione di bug:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -di-campi-data-ora Ho trovato quel link in quest'altra risposta che potrebbe aiutarti a capire meglio il problema:https://stackoverflow. com/a/22990991/259521

PHP sta davvero mostrando la sua età ultimamente e considero questo problema uno dei miei motivi per considerare di passare al più moderno Node.js.