Laravel 8使用Facades DB插入时如何获取主键用于foto字段赋值
解决方案
你可以使用Laravel查询构造器提供的insertGetId()方法实现需求,该方法会在插入数据后直接返回新生成的自增主键值,后续你就可以用该主键拼接文件名,再更新对应记录即可,修改后的代码参考如下:
public function aksimenulis_laporan(Request $request){ $filefoto = $request->foto; // 第一步:先插入除foto外的其他字段,拿到自增主键id $id_pengaduan = DB::table('pengaduan')->insertGetId([ 'tgl_pengaduan' => date('Y-m-d'), 'nik' => $request->input('nik'), // 更推荐用Laravel的$request获取参数,替代原生$_POST 'isi_laporan' => $request->input('isi_laporan'), 'status' => '0', ]); // 第二步:拼接你需要的foto文件名格式 $nama_file_baru = $id_pengaduan . '_' . $filefoto->getClientOriginalName(); // 第三步:更新刚才插入的记录,填充foto字段 DB::table('pengaduan') ->where('id_pengaduan', $id_pengaduan) ->update(['foto' => $nama_file_baru]); // 上传文件时也使用拼接好的新文件名 $tujuan_upload = storage_path(); $filefoto->move($tujuan_upload, $nama_file_baru); return redirect(''); }
补充说明
insertGetId()仅适用于主键为自增类型的场景,和你表中id_pengaduan的结构匹配。- 额外建议:Laravel中优先用
$request->input('参数名')替代原生$_POST获取请求参数,兼容性和安全性更好。 - 如果你的表有对应Eloquent模型的话,也可以先创建模型实例、保存后直接取
$model->id拿到主键,逻辑和上面的方案一致。
内容的提问来源于stack exchange,提问作者Apriza Prasetio
相关产品推荐
相关产品推荐

