2016-10-27 2 views
1

私は、要求オブジェクトを通してモデルを更新しているコントローラを持っています。それは見えるLaravelモデルの「開始」日付属性が変更されています

$save_series = Series::where('id','=',$request->input('data.item.id'))->with('booking')->first(); 
$save_series->name    = $request->input('data.item.name'); 
$save_series->color     = str_replace('#', '', $request->input('data.item.color')); 
$save_series->production_company = $request->input('data.item.production_company'); 
$save_series->booking->start  = $request->input('data.item.booking.start'); 
$save_series->booking->end   = $request->input('data.item.booking.end'); 
$save_series->booking->save(); 
$save_series->save();    

これを保存すると、関連する "予約"オブジェクトが更新されます。 「終了」日付属性が変更された場合、「開始」属性の時刻は現在の時刻に設定されます。これは事実ではありません!解析された$リクエストの開始時刻を完全に無視しているようです。

予約に関連するモデルでは、問題がその時点より前に存在するかどうかを確認するためにsetterミューテータを配置しました。日付は正しく解析されていますが、データベースにヒットした後は変更されています。 (ただ、このテストのために)私の設定は、次のようになります。

PHP message: :::::::::::TEST BELOW: 
PHP message: 2016-10-27 00:00:00 

しかし、このレコードの「スタート」のデータベースフィールドは、読み取ります:

public function setStartAttribute($time) { 
    error_log(":::::::::::TEST BELOW:"); 
    error_log($time); 
    return $time; 
} 

エラーログ結果が

2016-10-27 13:07:53 

誰かがここで何が起こっているのか説明してください。私は完全に完全に失われています!

- 要求されたとして追加情報 - 問題の原因となっ

移行:問題を修正し

Schema::create('calendar_events', function (Blueprint $table) { 
    $table->increments('id')->unsigned(); 
    $table->integer('calendar_event_type')->references('id')->on('calendar_event_types'); 
    $table->timestampTz('start'); 
    $table->timestampTz('end'); 
    $table->softDeletes(); 
    $table->timestamps(); 
}); 

移行解像度:

Schema::create('calendar_events', function (Blueprint $table) { 
    $table->increments('id')->unsigned(); 
    $table->integer('calendar_event_type')->references('id')->on('calendar_event_types'); 
    $table->dateTime('start'); 
    $table->dateTime('end'); 
    $table->softDeletes(); 
    $table->timestamps(); 
}); 

を私はこれが何かを持って想定していますtimestampTzのMySQLサポートと、それをデータベースに送信していたフォーマットと関係があります。これを変更して私の問題は解決されました。ありがとうございます@FrankProvost!私はそれを想定してい

は、タイムゾーンを維持できるようになりましたではありません。私のユースケースでは、タイムゾーンは問題ではありませんが、持っているといいでしょう。

+1

のための唯一のウィッヒを行く

代わりの

$table->timestamp('my_custom_date'); $table->timestamps(); 

はこれを説明することができ、お時間のformattが00h-12hの – WebFreak

+0

です '$ time'日時書式は、おそらく問題です – Wistar

+0

@ThibaultDumasは "2016-10-27 13:07:53"の問題を解析していますか?それはCarbonのインスタンスか他の何かを期待していますか? – kirgy

答えて

0

私はこの理由を認識していませんが、追加のタイムスタンプを追加するときは、デフォルトのタイムスタンプを追加した後で追加のタイムスタンプを追加する必要があります。

それ以外の場合は、「更新時に現在のタイムスタンプを設定」フラグが間違った列に設定されているようです。常に

$table->timestamps(); 
$table->timestamp('my_custom_date'); 
関連する問題