You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Laravel日期列存入Null值时自动设为CURRENT_DATE的问题?

问题分析与解决方案

核心问题

你控制器中的isset($request->valid_to)判断逻辑存在缺陷:当请求中valid_to的值为null时,isset()会返回false,导致该字段没有被加入到$trainingsData数组中。此时Laravel执行插入操作时未显式赋值该字段,触发了自动填充当前日期的隐性行为。

解决方案

方案1:修正字段存在性判断逻辑

使用Laravel请求对象的has()方法替代isset(),has()会检查请求中是否存在该字段,无论其值是否为null:

$trainingsData = [
    'category_id'   => $request->category_id,
    'trainer_id'    => $request->trainer_id,
    'valid_from'    => $request->valid_from,
];
if ($request->has('valid_to')) {
    $trainingsData['valid_to'] = $request->valid_to;
}
$participant->participantTrainings()->create($trainingsData);

方案2:直接赋值字段(更简洁)

无需额外判断,直接将valid_to加入数据数组——如果请求中该字段为null,Laravel会正确将null写入数据库(前提是数据库列已设置nullable):

$trainingsData = [
    'category_id'   => $request->category_id,
    'trainer_id'    => $request->trainer_id,
    'valid_from'    => $request->valid_from,
    'valid_to'      => $request->valid_to,
];
$participant->participantTrainings()->create($trainingsData);

额外优化:完善模型字段类型转换

在模型中给valid_to添加日期类型的cast,确保数据类型转换正确:

protected $casts = [
    'participant_id' => 'integer',
    'category_id' => 'integer',
    'trainer_id' => 'integer',
    'valid_from' => 'date:Y-m-d',
    'valid_to' => 'date:Y-m-d', // 新增该字段的类型转换
];

内容的提问来源于stack exchange,提问作者Mohamad Pais

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:15:00