Laravel 5.5中product表新增uploaded_image字段无法更新求助
解决Laravel 5.5中uploaded_image字段无法更新的问题
兄弟,我帮你捋捋这个问题哈,从你给出的代码片段来看,核心问题大概率出在验证规则遗漏、模型批量赋值权限,还有可能是文件上传逻辑缺失这几个地方,我给你一步步拆解解决:
1. 先把uploaded_image加入验证规则
你当前的validate方法只校验了product_name、description、rating,请求里的uploaded_image会被自动过滤掉,根本到不了后续更新环节。得把它加进去,分两种场景:
- 如果是上传图片文件:
$data = $request->validate([ 'product_name' => 'required', 'description' => 'required', 'rating' => 'required', // 可根据需求调整规则,比如限制图片类型、大小 'uploaded_image' => 'nullable|image|max:2048' ]);
- 如果只是存字符串(比如图片路径):
$data = $request->validate([ 'product_name' => 'required', 'description' => 'required', 'rating' => 'required', 'uploaded_image' => 'nullable|string' ]);
2. 给Product模型开放批量赋值权限
Laravel的Eloquent默认会保护批量赋值,你手动新增的字段必须加到模型的$fillable数组里,不然更新时会被直接忽略:
打开app/Product.php,修改$fillable:
class Product extends Model { protected $fillable = [ 'product_name', 'description', 'rating', 'uploaded_image' // 把这个字段加进来 ]; }
3. 如果是文件上传,得补充文件存储逻辑
要是uploaded_image是用来存上传图片的路径,那你还得在更新前处理文件上传:
public function update(Request $request, $id) { $data = $request->validate([ 'product_name' => 'required', 'description' => 'required', 'rating' => 'required', 'uploaded_image' => 'nullable|image|max:2048' ]); // 处理图片上传逻辑 if ($request->hasFile('uploaded_image')) { // 把图片存到public目录下的uploads/products文件夹,自动生成随机文件名 $imagePath = $request->file('uploaded_image')->store('uploads/products', 'public'); // 将存储路径存入$data数组 $data['uploaded_image'] = $imagePath; } // 找到对应产品并执行更新 $product = Product::findOrFail($id); $product->update($data); // 后续的跳转或响应逻辑 return redirect()->route('products.show', $product)->with('success', '产品更新成功'); }
4. 额外检查:表单是否正确配置文件上传属性
如果是传文件的话,你的表单必须加上enctype="multipart/form-data",不然文件根本传不到后端:
<form action="{{ route('products.update', $product) }}" method="POST" enctype="multipart/form-data"> @csrf @method('PUT') <!-- 其他表单字段 --> <input type="file" name="uploaded_image"> <button type="submit">更新产品</button> </form>
按照这几步操作,应该就能解决你的uploaded_image字段无法更新的问题啦!
内容的提问来源于stack exchange,提问作者Niladri Banerjee - Uttarpara
相关产品推荐
相关产品推荐

