2017-04-21 15 views
0

私はLaravelの日付形式をPgSQLで使用するのに苦労しています。Laravel 5、PgSQLと日付形式

マイ必要:

  • 入力日付このISO8601形式でなければなりません:Y-m-d\TH:i:s\Z(例:2016-05-13T10:05:00Z)
  • 出力は同じ形式
  • pgSQLでなければなりませんフォーマットY-m-d H:i:sに格納する(例:2016年5月13日10時05分00秒)

硬質部は、入力と出力の特定の日付フォーマットを受け入れるグローバルにLaravelを設定するが、無し「内部」フォーマットを変更する。

プロパティは、フォーマットをカスタマイズするためにオーバーライドすることができますが、それは世界的に動作します

protected $dateFormat = 'Y-m-d\TH:i:s\Z'; 

データベースから日付を取得する際にこれが(カスタムマスクでPgSQLの日付を変換しようとしている:InvalidArgumentException)エラーにつながります。

ミドルウェアを使用しないようにするか、コントローラの応答ごとに手動で行うことをお勧めします。

答えて

1

アクセサーとミューテータを使用したいと思うような音です。ここにはmy_dateの列を持つクラスの基本的な例がありますが、変換は正確ではないかもしれません(私はちょうどstrtotime()がうまくいくと仮定しています)が、それは簡単に修正できるはずです。

class SomeModel extends Model 
{ 
    // triggered whenever you retrieve the date from the db 
    public function getMyDateAttribute($value) 
    { 
     return date('Y-m-d\TH:i:s\Z', strtotime($value)); 
    } 

    // triggered whenever you insert the date into the db 
    public function setMyDateAttribute($value) 
    { 
     $this->attributes['my_date'] = date('Y-m-d H:i:s', strtotime($value)); 
    } 
} 

ここで、データベースは1つの日時フォーマットを使用でき、アプリケーションの他の部分は別のものを使用できます。他のモデルでも再利用できるようにするには、列の名前が同じである限り、それを特性に抽出することができます。

+0

それは私が恐れていたことです:(各フィールドでそれを行うのは面倒なことになりますし、プロジェクトのいくつかの時点で忘れてしまうとエラーにつながります。 – frinux