Laravel实现状态更新功能提交后显示空值该如何解决?
Laravel文章状态切换空值问题修复方案
出现空值的核心原因:控制器第二个参数错误使用路由模型绑定注入Post模型,路由传递的第二个参数是状态字符串(publish/draft),并非Post模型的主键ID,Laravel无法匹配到对应模型实例,最终$stat的值为null,写入数据库后就出现空值。
接下来分步骤修复所有问题:
1. 修复Blade模板逻辑错误
原模板存在两处错误:
- 错误使用赋值运算符
=,会直接修改当前$post对象的status属性值 - 传递的状态值和预期切换的目标状态相反:当前状态为publish时要切换为draft,应该传递draft而非publish
修复后的代码:
@if ($post->status == 'publish') <a href="/statusUpdate/{{$post->id}}/draft" class="btn btn-info btn-xs navbar-btn">Draft</a> @else <a href="/statusUpdate/{{$post->id}}/publish" class="btn btn-primary btn-xs navbar-btn">Publish</a> @endif
2. 修复控制器参数与逻辑错误
原控制器存在三处错误:
- 第二个参数错误使用Post模型注入,导致拿到的参数为空
- update语句中多余更新主键id,无意义且有风险
- 模型名
post首字母未大写,不符合Laravel命名规范
修复后的代码:
public function newStatus($id, $status) { Post::where('id', $id)->update(['status' => $status]); return redirect('/postview')->with('M_status', 'Your Status has been updated!'); }
更优写法(可选)
可以直接用路由模型绑定注入Post实例,简化代码:
首先修改路由定义web.php:
Route::get('/statusUpdate/{post}/{status}', [AdminsController::class, 'newStatus']);
修改控制器代码:
public function newStatus(Post $post, $status) { $post->update(['status' => $status]); return redirect('/postview')->with('M_status', 'Your Status has been updated!'); }
内容的提问来源于stack exchange,提问作者Abdullah Niaz
相关产品推荐
相关产品推荐

