Laravel多文件上传已存public文件夹但数据未存入数据库如何解决
问题原因及解决方案
核心原因
- 控制器代码中
dd($doc)语句会在打印数据后直接终止程序运行,后续的$doc->save()写入数据库操作完全没有执行,这是最直接的原因。 - 上传文件的表单未添加
enctype="multipart/form-data"属性(你提供的Blade代码仅展示了文件输入框部分,未展示form标签),如果缺少该属性,文件无法正常提交到后端,会导致文件校验不通过或者$fileData为空。 - 数据库
documents表的file字段类型设置错误,如果字段为长度较小的varchar类型,无法存储多文件名拼接后的JSON字符串,会导致写入失败。 - 代码存在不规范笔误:
$doc->product_id = $request->product_id;;多写了一个分号,虽不影响运行但建议修正。
解决步骤
- 直接删除控制器中的
dd($doc);一行,让save()方法可以正常执行。 - 在Blade模板的表单
<form>标签中添加enctype="multipart/form-data"属性,示例:<form method="POST" action="{{ route('你的路由名') }}" enctype="multipart/form-data"> <!-- 原有表单内容 --> </form> - 检查数据库
documents表的file字段,将类型修改为json或者longtext保证可以容纳JSON格式的多文件名数据。 - 修正笔误,将
$doc->product_id = $request->product_id;;改为$doc->product_id = $request->product_id;。 - (可选优化)在Document模型中添加字段类型转换,后续读取数据时无需手动解析JSON:
protected $casts = [ 'file' => 'array', ];
内容的提问来源于stack exchange,提问作者Mika
相关产品推荐
相关产品推荐

