php - laravel 5.7 如何将日期时间字段更新为空
问题描述
■ Laravel:5.7
■ PHP:7.2
我需要将模型DateTime Field 更新为 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();
}
解决方案
回到当天的原因是:
当您的财产评估员为一个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
值相同的行为。jobStart
删除它的另一个原因是评估员已经格式化了日期。
推荐阅读
- javascript - Visual Studio ReSharper - 在外部模块中声明的 Typescript 自动导入类 - 使用 from 而不是 require
- java - Java Hyperledger-panic:runtimr 错误:无效的内存地址或 nil 指针取消引用
- django - 基于 django 类的视图是否继承 method_decorators?
- oracle - 我不知道我的 SQL 有什么问题(在 Oracle SQL Developer 中)
- python - 无法使用 Scrapy 抓取下一页内容
- c# - WinForms NumericUpDown 不断乘以 10。为什么?
- php - 适用于 Web 应用程序的 Azure MySQL In App 不更新行
- javascript - 没有标签的html文本
- javascript - 复制对象数组
- events - 如何在微服务架构中共享事件代码