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

Laravel中多输入字段向单列存数据时列空白的问题咨询

问题分析与解决方案

你的代码存在两个核心问题导致数据库列为空:

  1. 使用$request->input([...])会返回数组,但数据库的schoolname等字段是字符串类型,直接赋值无法正确存储;
  2. 代码片段中缺少save()调用,没有执行实际的入库操作(如果你的完整代码里也没加的话)。

下面分两种场景给出对应实现方式:

场景1:将多个输入合并为单个字符串存入一列

如果确实需要把小学、中学、大学的信息合并到同一列(比如用分隔符区分),修改代码如下:

$user = new ApplicantEducModel();
$user->app_id = $app_id;

// 用逗号分隔合并多个校名,转大写
$user->schoolname = Str::upper(implode(', ', [
    $request->input('elemSchoolName'),
    $request->input('secondarySchoolName'),
    $request->input('tertiarySchoolName'),
]));

// 合并入学年份
$user->inclusive_year = implode(', ', [
    $request->input('elemSchoolYear'),
    $request->input('secondarySchoolYear'),
    $request->input('tertiarySchoolYear'),
]);

// 合并学校地址,转大写
$user->school_address = Str::upper(implode(', ', [
    $request->input('elemAdd'),
    $request->input('secondaryAdd'),
    $request->input('tertiaryAdd'),
]));

// 执行保存
$user->save();

同时要确保模型ApplicantEducModel中配置了可填充字段:

class ApplicantEducModel extends Model
{
    protected $fillable = ['app_id', 'schoolname', 'inclusive_year', 'school_address'];
    // 其他代码...
}

场景2:每个学校信息单独存为一行(更符合数据库规范)

从你的数据库截图看,同一app_id已有2条记录,更合理的设计是把每个学校的信息单独存一行,代码实现如下:

// 整理所有学校的输入数据
$schoolData = [
    [
        'name' => $request->input('elemSchoolName'),
        'year' => $request->input('elemSchoolYear'),
        'address' => $request->input('elemAdd'),
    ],
    [
        'name' => $request->input('secondarySchoolName'),
        'year' => $request->input('secondarySchoolYear'),
        'address' => $request->input('secondaryAdd'),
    ],
    [
        'name' => $request->input('tertiarySchoolName'),
        'year' => $request->input('tertiarySchoolYear'),
        'address' => $request->input('tertiaryAdd'),
    ],
];

// 遍历创建每条学校记录,跳过空数据
foreach ($schoolData as $data) {
    if (empty($data['name']) && empty($data['year']) && empty($data['address'])) {
        continue;
    }

    $record = new ApplicantEducModel();
    $record->app_id = $app_id;
    $record->schoolname = Str::upper($data['name']);
    $record->inclusive_year = $data['year'];
    $record->school_address = Str::upper($data['address']);
    $record->save();
}

额外检查点

  • 用dd($request->all())打印请求参数,确认前端确实传递了这些字段的值;
  • 检查数据库表字段是否允许非空(如果是必填项),或者字段类型是否匹配(比如字符串长度足够)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:01:24