Php 日期为空字符串时缺少Laravel碳数据

Php 日期为空字符串时缺少Laravel碳数据,php,laravel,php-carbon,Php,Laravel,Php Carbon,在我的模型中,我有以下内容: protected $dates = ['start_date']; 我正在使用“日期”类型的输入字段来选择日期。如果用户删除日期,其值将变为空字符串“”。 更新模型时,出现以下错误: exception: "InvalidArgumentException" file: "C:\www\projects\crm\vendor\nesbot\carbon\src\Carbon\Carbon.php" line: 582 message: "Data missing

在我的模型中,我有以下内容:

protected $dates = ['start_date'];
我正在使用“日期”类型的输入字段来选择日期。如果用户删除日期,其值将变为空字符串“”。 更新模型时,出现以下错误:

exception: "InvalidArgumentException"
file: "C:\www\projects\crm\vendor\nesbot\carbon\src\Carbon\Carbon.php"
line: 582
message: "Data missing"
我可以通过使用这样的变异体来避免这个错误:

public function setStartDateAttribute($value)
{
    if ($value) {
        $this->attributes['start_date'] = $value;
    } else {
        $this->attributes['start_date'] = null;
    }
}
问题:
有没有比使用mutator更快/更好的方法来处理将空字符串存储为日期的问题?

更深入地研究一下:

中间件在5.4中更新

Laravel 5.4在默认中间件堆栈中包括两个新中间件:
TrimStrings
ConvertEmptyStringsToull

这些中间件将自动调整请求输入值和 将任何空字符串转换为
null
。这有助于您正常化 输入输入到应用程序中的每个请求,而不必 担心在每个路线和路线中不断调用
trim
函数 控制器

发件人:

因此,当我抓取请求对象时,一个空的日期字段被转换为null。数据库允许这些字段为null,并且一切正常

因此,通过前端,可以无误地输入和删除日期字段。根据您的请求手动更新为空字符串时

\App\Yourmodel::find(7)->update(["your_date_field" => ""]);  
我有同样的
数据丢失
错误

问题是,您是特别需要传递空字符串,还是让字段为null对您来说是一个更好的选择

\App\Yourmodel::find(7)->update(["your_date_field" => null]);

您使用的是
Carbon::createFromFormat($format,$time,$tz)某处?我没有明确使用它,但Laravel在将字段设置为日期()时使用了它。我以前从未遇到过这种情况。在一个应用程序中,我有许多日期字段。它们在迁移中重新标记为nullable,并在模型上的日期数组中列出。这一切都可以正常工作,无需变异。您可以尝试
\App\Yourmodel::find(7)->更新([“您的日期字段”=>”)?现在一切都清楚了。我前端有一个空字符串的原因是,我将数据包装在FormData变量中,以便将文件上载到服务器。我尝试分割文件和数据字段数据,并向服务器发送带有两个变量(数组+文件)的请求,但不幸的是,我只得到了数组
axios.post('/api/controller/update/'+this.id,{fd:formData,data:this.data})