sql >> データベース >  >> RDS >> Mysql

ミリ秒を表示するLaravelタイムスタンプ

    PHP PDOドライバーはタイムスタンプの秒数をサポートしていないため、これはできません。回避策は、代わりにタイムスタンプを文字列として選択することです。これにより、PDOドライバーは、$query->selectRaw(DB::raw("CONCAT(my_date_column) as my_date_column")) ただし、これは、すべてのフィールドにデフォルトの選択を使用できないことを意味するため、クエリは非常に面倒になります。また、モデルのgetDateFormatをオーバーライドする必要があります。

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

    最後に、nullableTimestampsではなく移行で、Schemaコールバックの外部で次のことを行います。

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

    この例は小数点以下3桁であることに注意してください。ただし、必要に応じて、alter tableとsprintfの2か所で3を6に変更し、乗数*1000から1000000を6に調整することで最大6にすることができます。

    いつかPHPPDOが更新されてこれが修正されることを願っていますが、5年以上経過しており、何も変更されていないため、期待は持てません。詳細に興味がある場合は、次のバグレポートを参照してください: http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format -of-datetime-fields 私はあなたが問題をより理解するのを助けるかもしれないこの他の答えのリンクを見つけました: https://stackoverflow。 com / a / 22990991/259521

    PHPは最近その時代を迎えています。この問題は、より新しいNode.jsへの移行を検討する理由の1つだと思います。



    1. 複数のエンティティバインディングを使用してElasticSearchインデックス構造を設定する方法

    2. T-SQLのバグ、落とし穴、およびベストプラクティス–決定論

    3. ZF2のZend\Dbはトランザクションをどのように制御しますか?

    4. スキーマとビューを使用してPostgreSQLユーザーアクセスを制限する