Laravel中如何将两个日期数据存入单个数据库列?
可行实现方案
你的核心需求是将两个日期选择器的from和to字段,拼接成「YYYY年MM月DD日 至 YYYY年MM月DD日」格式存入requested_date字段,以下是修正后的实现方案:
关键问题修正
- 原代码直接拼接
DateTime对象会生成非预期的字符串,需通过日期格式化方法生成目标格式 - 赋值时错误使用了
$request->requested_date,应使用自定义的$requested_date变量
修改后的控制器代码
public function saveRecord(Request $request) { $request->validate([ 'leave_type' => 'required|string|max:255', 'from' => 'required|string|max:255', 'to' => 'required|string|max:255', 'day' => 'required|string|max:255', 'leave_reason' => 'required|string|max:255', ]); DB::beginTransaction(); try{ $dt = Carbon::now(); $todayDate = $dt->toDayDateTimeString(); // 解析日期并格式化为中文日期格式 $fromDate = Carbon::parse($request->from)->format('Y年m月d日'); $toDate = Carbon::parse($request->to)->format('Y年m月d日'); $requested_date = "{$fromDate} 至 {$toDate}"; $leaves = new LeaveAdmin; $leaves->rec_id = $request->rec_id; $leaves->name = $request->name; $leaves->date_filed = $todayDate; $leaves->leave_type = $request->leave_type; $leaves->requested_date = $requested_date; // 修正赋值变量 $leaves->day = $request->day; $leaves->leave_reason = $request->leave_reason; $leaves->save(); DB::commit(); Toastr::success('Create new Leaves successfully','Success'); return redirect()->back(); }catch(\Exception $e){ DB::rollback(); Toastr::error('Add Leaves fail','Error'); return redirect()->back(); } }
额外说明
- 如果前端传递的日期格式无法被Carbon自动解析(比如非
Y-m-d格式),可以指定解析格式:
例如前端传的是$fromDate = Carbon::createFromFormat('你的日期格式', $request->from)->format('Y年m月d日');d/m/Y,就用Carbon::createFromFormat('d/m/Y', $request->from) - 迁移文件中
requested_date字段为string类型,足够存储目标格式的字符串,无需修改迁移
内容的提问来源于stack exchange,提问作者Jay-ar Cristobal
相关产品推荐
相关产品推荐

