Laravel 8对接Cloudinary上传图片成功但数据库记录未创建如何解决
你代码中cloudinary()->upload执行完成后调用了dd($path),该函数会直接终止程序运行,后续给模型赋值image、写入数据库的逻辑完全不会执行,这是你图片上传成功但数据库无记录的最直接原因,请先删除该调试代码再测试。
如果删除后问题仍然存在,可按以下步骤排查:
- 检查Festival模型的批量赋值配置
Laravel 8默认开启模型批量赋值保护,你需要在app/Models/Festival.php文件中配置$fillable属性,将你需要写入的字段加入白名单:
如果未配置对应字段,会触发批量赋值异常,导致数据写入失败。// Festival模型中添加该属性 protected $fillable = ['name', 'description', 'image']; - 检查数据库表字段约束
确认festivals表的字段配置和你的验证规则匹配:name字段是否设置了唯一索引,且长度不小于255image字段的字符串长度是否足够存储拼接后的路径,建议设置为varchar(255)及以上长度- 所有必填字段是否都允许为非空,和你传入的数据匹配
- 查看具体报错信息
将项目根目录.env文件中的APP_DEBUG参数设置为true,重新通过Postman发起请求,即可看到具体的异常报错内容;也可以直接查看storage/logs/laravel.log日志文件,定位具体错误原因。 - 额外优化建议
你当前的代码执行顺序是先上传图片再写入数据库,若后续数据库写入失败会导致Cloudinary中残留无效图片,建议调整为:先完成所有数据校验、先写入基础数据到数据库,再执行图片上传,上传成功后再更新image字段;也可以引入数据库事务,若数据库写入失败则调用Cloudinary的删除接口清理已上传的图片,保证数据一致性。
内容的提问来源于stack exchange,提问作者Jhonathan Pizarra
相关产品推荐
相关产品推荐

