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

Laravel中按钮仅更新用户status字段失败,如何修复?

修复仅传递'status'参数更新用户状态的问题

我看了你的代码,马上就发现了问题所在:你的表单根本没传递要更新的用户ID,而且你在控制器里试图获取的status参数也不存在——这就导致你的激活/停用方法找不到正确的用户,自然无法更新状态。

下面是具体的修复步骤:


1. 修改视图:添加用户ID的隐藏字段

你需要在表单里加入一个隐藏字段,把当前用户的ID传递给控制器,这样控制器才知道要操作哪个用户:

{!! Form::open(array('url' => 'admins-users/status')) !!}
    {{-- 新增:传递用户ID的隐藏字段 --}}
    {!! Form::hidden('user_id', $user->id) !!}
    
    @if ($user->status) 
        {!! Form::submit('inactivate', ['name' => 'inactivate', 'class'=>'btn btn-xs btn-default']) !!} 
    @else 
        {!! Form::submit('Activate', ['name' => 'activate', 'class'=>'btn btn-xs btn-success']) !!} 
    @endif 
{!! Form::close() !!}

2. 修改控制器:获取正确的参数并更新用户

控制器里的$action = Input::get('status');完全是无效的,因为表单里没有这个字段。我们要改成获取用户ID,然后传递给激活/停用方法:

public function activation() { 
    // 获取表单传递的用户ID
    $userId = Input::get('user_id'); 
    
    if (Input::get('activate')) { 
        $this->activateUser($userId); 
    } elseif (Input::get('inactivate')) { 
        $this->deactivateUser($userId); 
    } 
    
    return redirect(route('admins-users.index'))->with('message-post', 'Status was updated successfully'); 
} 

public function activateUser($userId) { 
    // 用findOrFail更严谨,避免更新不存在的用户(如果不需要自动创建用户的话)
    User::findOrFail($userId)->update(['status' => "1"]); 
} 

public function deactivateUser($userId) { 
    User::findOrFail($userId)->update(['status' => "0"]); 
}

额外说明

如果你原本的想法是直接传递status参数来控制更新值(而不是通过按钮名称判断),也可以调整逻辑:比如在视图里传递目标status值,控制器直接拿这个值更新。但从你现有代码的按钮逻辑来看,上面的修复更贴合你的实现思路。

内容的提问来源于stack exchange,提问作者Ilham Firman Ashari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:01:32