Laravel中如何正确向JSON添加2个字段实现两组数据同时存入数据库
问题原因
- 控制器遍历逻辑错误:
request('nif', 'name')实际返回的是['nif' => 前端传入的nif数组, 'name' => 前端传入的name数组],你遍历这个数组时拿到的$val分别是完整的nif数组、完整的name数组,直接赋值给字段自然会出现值错乱。 - 模型的
getRepeatedFields方法存在逻辑错误:方法内连续写了两个return,第二个return json_decode($this->name);永远不会被执行。 - 额外HTML规范问题:前端模板中多个input使用了相同的id属性,不符合HTML规范,如有JS操作需求建议修改为唯一id。
修复方案
1. 修复控制器store方法
你需要按数组下标匹配同组的nif和name,还可以用批量插入避免多次调用create,符合你的设计要求:
public function store(Request $request) { // 先验证字段是否存在,且两个数组长度一致 $validated = $request->validate([ 'nif' => 'required|array', 'name' => 'required|array', 'nif.*' => 'required|string', 'name.*' => 'required|string' ]); $insertData = []; // 按下标匹配同组的nif和name foreach ($validated['nif'] as $index => $nifVal) { $insertData[] = [ 'nif' => $nifVal, 'name' => $validated['name'][$index], // 如果表有自动维护的时间字段,手动加上即可 'created_at' => now(), 'updated_at' => now() ]; } // 批量插入,仅调用一次数据库操作 EnviarCurriculum::insert($insertData); }
2. 修复模型的getRepeatedFields方法
如果你需要同时返回两个字段的解析结果,可以返回数组:
public function getRepeatedFields() { return [ 'nif' => json_decode($this->nif), 'name' => json_decode($this->name) ]; }
如果你的场景不需要JSON解析,也可以直接返回原始值,自行调整逻辑即可。
内容的提问来源于stack exchange,提问作者El conde Lucanor
相关产品推荐
相关产品推荐

