You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 18:45:01