sql >> Databáze >  >> RDS >> Mysql

Časová razítka Laravel pro zobrazení milisekund

Nemůžete, protože ovladač PHP PDO nepodporuje zlomky sekund v časových razítkách. Problém lze obejít tak, že místo toho vyberete časové razítko jako řetězec, aby ovladač PDO neznal jeho skutečné časové razítko, jednoduše provedením $query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column")) to však znamená, že nemůžete použít výchozí výběr pro všechna pole, takže dotazování se stává skutečnou bolestí. Také musíte u modelu přepsat getDateFormat.

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

Nakonec ve vaší migraci, nikoli nullableTimestamps, mimo zpětné volání schématu proveďte:

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

Všimněte si, že tento příklad byl na 3 desetinná místa, ale můžete jich mít až 6, pokud chcete, změnou 3 na 6 na dvou místech, v alter tabulce a ve sprintf a také úpravou násobitele * 1000 až 1000000 pro 6.

Doufejme, že jednoho dne bude PHP PDO aktualizováno, aby to napravilo, ale už je to více než 5 let a nic se nezměnilo, takže si nedělám žádné naděje. V případě, že vás zajímají podrobnosti, podívejte se na toto hlášení o chybě:http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields Našel jsem tento odkaz v této další odpovědi, který vám může pomoci lépe porozumět problému:https://stackoverflow. com/a/22990991/259521

PHP v poslední době skutečně ukazuje svůj věk a tento problém bych považoval za jeden z důvodů, proč zvažuji přechod na modernější Node.js.



  1. UNPIVOT na neurčitém počtu sloupců

  2. Neplatný argument zadaný pro foreach() v Codeigniter

  3. Nejčastější dotazy o JAVA/JRE v Oracle Apps

  4. foreach %dopar% + RPostgreSQL