在我的模型中,我有以下内容:
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处理将空字符串存储为日期更快/更好的方法?
答案 0 :(得分:1)
深入研究这个问题:
中间件在5.4中更新
Laravel 5.4在默认中间件堆栈中包含两个新的中间件:TrimStrings
和ConvertEmptyStringsToNull
。
这些中间件将自动修剪请求输入值和 将任何空字符串转换为
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]);