我正在尝试更新数据库中出生列的日期,当我提交表格时,我收到了这个错误
DateTime::__construct(): Failed to parse time string (25/03/1995) at position 0 (2): Unexpected character
现在,在我的刀片中,我格式化了出生日期以显示d/m/Y,当更新时,我认为它会更新Y/m/d,因为当我从刀片中删除格式化功能时,它工作得很好。因此,我需要帮助了解如何在数据库中使用格式('d/m/Y'(进行更新,以及如何在表单请求验证中正确验证它。感谢您的帮助。这是我的密码。
index.blade.php
<input type="text" placeholder="dd/mm/yyyy" name="date_of_birth" value="{{ $userForShowProfile->date_of_birth ? $userForShowProfile->date_of_birth->format('d/m/Y') : "" }}">
UserController.php
public function updateProfileCharacteristics(UpdateProfileCharacteristicsRequest $request)
{
$user = Auth::user();
$user->update(
[
'date_of_birth' => $request->date_of_birth,
'age' => Carbon::now()->diffInYears($request->date_of_birth),
'updated_at' => Carbon::now()
]
);
return redirect()->route('profile.show', [$user->username]);
}
UpdateProfileCharacteristicsRequest.php
public function rules()
{
return [
'date_of_birth' => ['date'],
];
}
由于您在请求中以自定义格式发送日期,因此在插入日期之前,您需要将其解析为与数据库列中的格式匹配的格式:
$user->update(
[
'date_of_birth' => Carbon::createFromFormat("d/m/Y", $request->date_of_birth)->format('Y-m-d'), // parse the right format here
'age' => Carbon::now()->diffInYears(Carbon::createFromFormat("d/m/Y", $request->date_of_birth)),
'updated_at' => Carbon::now()
]
);
为了使该日期格式通过验证,您可以使用date_format:format
规则而不是date
:
public function rules()
{
return [
'date_of_birth' => ['date_format:"d/m/Y"'],
];
}
数据库迁移中的列类型是什么?如果是,请检查它是DATE、DATETIME还是TIMESTAMP,它应该是DATE,因此您可以将日期格式设置为Y-m-d。
如果要将DATE保存到DB,则其格式应为Y-m-d。
所以试试这个:
public function updateProfileCharacteristics(Request $request)
{
$user = Auth::user();
$user->update([
'date_of_birth' => Date('Y-m-d',strtotime($request->date_of_birth)),
'age' => Carbon::now()->diffInYears($request->date_of_birth),
'updated_at' => Carbon::now()
]);
return redirect()->route('profile.show', [$user->username]);
}