【发布时间】:2019-08-30 02:46:30
【问题描述】:
■ Laravel:5.7
■ PHP:7.2
我需要将模型DateTime字段更新为null,但我不知道为什么当我输入null时会将Field更新为当前日期时间。
当我将表单 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();
}
【问题讨论】:
-
您的日期时间是否可以为空?
-
'job_start' => 'datetime:Y-m-d H:i',会将 null 转换为 '1970-01-01 00:00:00' -
检查你的迁移,也许它已经定义了一个默认值。
-
Schema::create('jobs', function(Blueprint $table) { /**相关迁移设置**/ $table->dateTime('job_start')->nullable(); $ table->dateTime('job_end')->nullable(); });
-
如果您不想设置当前日期,
setJobStartAttribute方法可能不应该存在
标签: php laravel laravel-5 eloquent