DateTime型のNULL更新について
実行環境
■ Laravel : 5.7
■ PHP : 7.2
実現したいこと:
モデルDateTime型のNULL更新したいのですが、やり方よくわかりません。
発生している問題・エラーメッセージ
formのinputに空に変更で更新する時に、
何故か現在時刻に自動更新している。
該当のソースコード
現在のモデルの内容
/?php
namespace /**省略**/
class Job extends Model {
/**
* @var キャスト (toArray、toJson用)
*/
protected $casts = [
'visit_date' => 'date:Y-m-d',
'job_start' => 'datetime:Y-m-d H:i',
'job_end' => 'datetime:Y-m-d H:i',
];
/**
* @var date 時間フォーマット表示
*/
protected $dates = [
'visit_date',
'job_start',
'job_end',
];
// $fillableに指定したもの以外は入らない(save、update、fill)
protected $fillable = [
/**省略**/
'visit_date',
'job_start',
'job_end',
/**省略**/
];
/**他のFUNCTIONは無関係なので省略**/
/**
* ミューテター
* job_start の 設定
* @param string $value ($valueのフォーマットは 'Y:m:d H:i')
* @return void
*/
public function setJobStartAttribute($value) {
if($value !== null){
//$valueのフォーマットは 'Y:m:d H:i'
//Carbon で正常のフォーマットに変更する?
$value = (new Carbon($value))->format('Y-m-d H:i:s');
}
//null ならそのまま?
$this->attributes['job_start'] = $value;
}
/**
* ミューテター
* job_start の 取得
* @param string $value ($valueのフォーマットは 'Y:m:d H:i')
* @return void
*/
public function getJobStartAttribute($value) {
return (new Carbon($value))->format('Y-m-d H:i');
}
}
関連のマイグレーション
Schema::create('jobs', function(Blueprint $table)
{
/**省略**/
$table->dateTime('job_start')->nullable();
$table->dateTime('job_end')->nullable();
});
試したこと1
public function edit($id, Request $request){
$job = Job::findOrFail($id);
$job->job_start = null;
$job->save();
}
試したこと2
public function update($id, Request $request){
$job = Job::findOrFail($id);
//input内容のjob_startは空です
$job->fill( $request->input() );
$job->save();
}
両方とも何故かjob_startが現在時刻に更新しています。
同じ質問をteratailにも投稿しています。
https://teratail.com/questions/209084