Laravel中多输入字段向单列存数据时列空白的问题咨询
问题分析与解决方案
你的代码存在两个核心问题导致数据库列为空:
- 使用
$request->input([...])会返回数组,但数据库的schoolname等字段是字符串类型,直接赋值无法正确存储; - 代码片段中缺少
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
相关产品推荐
相关产品推荐

