Laravel表单请求无法更新可空字段问题求助
解决Laravel编辑文章时Tag字段无法更新的问题
我帮你排查下这个问题哈,其实核心原因挺清晰的,咱们一步步来搞定:
问题根源
你看你的PostRequest验证规则,在PUT/PATCH(编辑)的规则集合里,完全没把tag字段加进去!而Laravel的$request->validated()方法只会返回通过了验证规则的字段——也就是说,哪怕你前端提交了tag值,它也不会被放进$validated数组里,自然就没法更新到数据库了。
解决方案
只需要在编辑对应的验证规则里加上tag的验证规则就行,因为你的tag是可空字段,所以规则要设置为允许空值:
修改后的PostRequest.php代码
public function rules() { switch ($this->method()) { case 'POST': { return [ 'title' => 'required|max:512', 'content' => 'required', 'tag' => 'nullable|string', // 顺便给创建场景也加上,避免创建时传tag也被过滤 ]; } case 'PUT': case 'PATCH': { return [ 'title' => 'required|max:512', 'content' => 'required', 'tag' => 'nullable|string', // 关键:这里必须添加tag的验证规则 ]; } default: break; } }
注:如果你的tag字段不是字符串类型(比如是数组、整数),可以把
string改成对应的规则,比如array、integer,保持和数据表字段类型匹配就行。
额外优化(可选)
你的控制器update方法可以简化一点,既然已经注入了Post模型实例,直接用实例更新就行,不用再查一次数据库:
public function update(PostRequest $request, Post $post) { $validated = $request->validated(); $post->update($validated); // 直接调用实例的update方法更简洁高效 return redirect('/posts')->with('success', 'success'); }
这样修改后,编辑文章时tag字段就能正常更新啦~
内容的提问来源于stack exchange,提问作者Yasir
相关产品推荐
相关产品推荐

