Laravel项目中图片名称无法存入数据库的解决方法咨询
解决Laravel中图片名称无法存入数据库的问题
我来帮你搞定这个问题!你现在的代码已经成功把图片保存到了public/images文件夹,但数据库里的image字段没拿到文件名,核心原因是你直接用了$request->all()来创建模型,而这个数组里的image是上传的文件对象,不是你生成的那个$image1文件名。
具体修改方案
你需要手动把处理好的图片文件名添加到要存入数据库的数据里,有两种简单的方式:
方式一:手动构建数据数组
直接把所有字段和处理后的文件名一起传入create方法:
public function store(Request $request) { $request->validate([ 'title_uz' => 'required', 'desc_uz' => 'required', 'full_desc_uz' => 'required', 'company_id' => 'required', 'order' => 'required', 'image' => 'required|image|mimes:jpeg,png,jpg,svg|max:2048', ]); $image1 = time().'.'.$request->image->extension(); $request->image->move(public_path('images'), $image1); // 手动构建要存入的数据,替换image字段为处理后的文件名 Tarif::create([ 'title_uz' => $request->title_uz, 'desc_uz' => $request->desc_uz, 'full_desc_uz' => $request->full_desc_uz, 'company_id' => $request->company_id, 'order' => $request->order, 'image' => $image1, ]); return redirect()->route('tarifs.index') ->with('success','Yangi tarif muvoffaqiyatli qo`shildi.'); }
方式二:合并请求数据与图片文件名
先排除请求里原有的image字段,再添加处理后的文件名:
public function store(Request $request) { $request->validate([ 'title_uz' => 'required', 'desc_uz' => 'required', 'full_desc_uz' => 'required', 'company_id' => 'required', 'order' => 'required', 'image' => 'required|image|mimes:jpeg,png,jpg,svg|max:2048', ]); $image1 = time().'.'.$request->image->extension(); $request->image->move(public_path('images'), $image1); // 排除原image字段,合并新的image值 $tarifData = $request->except('image'); $tarifData['image'] = $image1; Tarif::create($tarifData); return redirect()->route('tarifs.index') ->with('success','Yangi tarif muvoffaqiyatli qo`shildi.'); }
关键检查点
别忘了确认你的Tarif模型里的$fillable属性包含了image字段,否则Laravel的批量赋值会忽略这个字段:
class Tarif extends Model { // 确保image在可填充字段列表里 protected $fillable = ['title_uz', 'desc_uz', 'full_desc_uz', 'company_id', 'order', 'image']; }
这样修改后,图片文件名就能正确存入数据库的image字段了,同时图片依然会正常保存到指定文件夹~
内容的提问来源于stack exchange,提问作者Hayrulla Melibayev
相关产品推荐
相关产品推荐

