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

Laravel-tidsstempler for at vise millisekunder

Det kan du ikke, fordi PHP PDO-driveren ikke understøtter brøkdele af sekunder i tidsstempler. En løsning er at vælge tidsstemplet som en streng i stedet, så PDO-driveren ikke ved, at det i virkeligheden er et tidsstempel, blot ved at gøre $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column")) Dette betyder dog, at du ikke kan bruge standardvalg for alle felter, så forespørgsel bliver en reel smerte. Du skal også tilsidesætte getDateFormat på modellen.

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

Endelig i din migrering i stedet for nullableTimestamps, uden for Schema callback skal du gøre:

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

Bemærk, at dette eksempel var for 3 decimaler, men du kan have op til 6, hvis du vil, ved at ændre 3'eren til en 6'er to steder, i altertabellen og i sprintf'en og også justere multiplikatoren * 1000 til 1000000 for 6.

Forhåbentlig en dag vil PHP PDO blive opdateret for at løse dette, men det er over 5 år siden, og intet er ændret, så jeg har ikke mine forhåbninger. Hvis du er interesseret i detaljerne, se denne fejlrapport:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-felter Jeg fandt det link i dette andet svar, som måske kan hjælpe dig med at forstå problemet bedre:https://stackoverflow. com/a/22990991/259521

PHP har virkelig vist sin alder på det seneste, og jeg vil betragte dette problem som en af ​​mine grunde til at overveje at flytte til den mere moderne Node.js.



  1. Implementering af en hierarkisk datastruktur i en database

  2. Docker-compose:mysqld:Kan ikke oprette/skrive til filen '/var/lib/mysql/is_writable' (Fejlkode:13 - Tilladelse nægtet)

  3. PDO med INSERT INTO gennem udarbejdede erklæringer

  4. Fejl ved indstilling af n_distinct ved hjælp af en plpgsql-variabel