当日期为空字符串

时间:2017-10-14 11:59:32

标签: php laravel php-carbon

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

protected $dates = ['start_date'];

我正在使用类型为' date'的输入字段。选择日期。如果用户删除了日期,则其值将变为空字符串""。 在更新我的模型时,我收到以下错误:

exception: "InvalidArgumentException"
file: "C:\www\projects\crm\vendor\nesbot\carbon\src\Carbon\Carbon.php"
line: 582
message: "Data missing"

我可以通过使用这样的mutator来避免这个错误:

public function setStartDateAttribute($value)
{
    if ($value) {
        $this->attributes['start_date'] = $value;
    } else {
        $this->attributes['start_date'] = null;
    }
}

问题: 有没有比使用mutator处理将空字符串存储为日期更快/更好的方法?

1 个答案:

答案 0 :(得分:1)

深入研究这个问题:

中间件在5.4中更新

Laravel 5.4在默认中间件堆栈中包含两个新的中间件:TrimStringsConvertEmptyStringsToNull

  

这些中间件将自动修剪请求输入值和   将任何空字符串转换为null。这有助于您规范化   输入您的应用程序的每个请求的输入,而不是   担心在每条路线中不断调用trim功能   控制器。

来自:https://laravel.com/docs/5.4/releases#laravel-5.4

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

因此,通过前端,可以输入和删除日期字段而不会出错。根据您的请求手动更新为空字符串

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

我遇到了同样的data missing错误。

问题是,你是否特别需要传递一个空字符串或使字段可以为空更好的选择?

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