■Laravel:5.7
■PHP:7.2
我需要将模型 DateTime 字段更新为空,但是我不知道为什么当我输入为null时会将字段更新为当前日期时间。
当我将表单job_start
或job_end
设置为空白时,会将字段更新为当前日期时间。
此外,我已经尝试过$job->job_start = null; $job->save();
,但得到了相同的结果。
class Job extends Model {
/**
* @var $casts(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 = [
/**SKIP**/
'visit_date',
'job_start',
'job_end',
/**SKIP**/
];
/**SKIP other function**/
/**
* job_start
* @param string $value ($value format 'Y:m:d H:i')
* @return void
*/
public function setJobStartAttribute($value) {
if($value !== null){
//$value format 'Y:m:d H:i' to 'Y-m-d H:i:s'
$value = (new Carbon($value))->format('Y-m-d H:i:s');
}
//set
$this->attributes['job_start'] = $value;
}
/**
* job_start
* @param string $value ($value format 'Y:m:d H:i:s')
* @return void
*/
public function getJobStartAttribute($value) {
//$value format 'Y:m:d H:i:s' to 'Y-m-d H:i'
return (new Carbon($value))->format('Y-m-d H:i');
}
}
相关迁移设置:
Schema::create('jobs', function(Blueprint $table) {
/**Relate Migration setting**/
$table->dateTime('job_start')->nullable();
$table->dateTime('job_end')->nullable();
});
已经尝试:
public function update($id, Request $request) {
$job = Job::findOrFail($id);
$job->fill( $request->input() );
//test set job_start null as below,
//but I don't know why when I input to null will update Field to current date time.
$job->job_start = null;
$job->save();
}
答案 0 :(得分:0)
返回当前日期的原因是:
当您的财产评估师为null
值执行操作时,其评估结果为new Carbon(null)
,该值等于Carbon::now()
public function getJobStartAttribute($value) {
//$value format 'Y:m:d H:i:s' to 'Y-m-d H:i'
return (new Carbon($value))->format('Y-m-d H:i');
}
您可以通过编写
修复该路径public function getJobStartAttribute($value) {
if ($value !== null) {
//$value format 'Y:m:d H:i:s' to 'Y-m-d H:i'
return (new Carbon($value))->format('Y-m-d H:i');
}
return $value;
}
还要从jobStart
属性中删除$casts
。否则,您将得到与null
的{{1}}值强制转换为当前日期相同的行为。
另一个删除原因是评估者已经格式化了日期。