无法更新 laravel 中的一个字段

couldn't update one field in laravel

这是web.php中的路线:

 Route::put('/users.status', [\App\Http\Controllers\dashboard\UsersController::class, 'status'])->name('users.status');

控制器中的代码如下:

public function status(User $user) {
              try{
                $user->is_active = 1;
                $user->update();
//$user->update(['is_active' => 1 ]);
               }catch (\Exception $ex) {
                return redirect()->route('users.index')->with('status', "you couldn't update this record");
            }

            return redirect()->route('users.index')->with('status', 'User Updated successfully');
    }

这是视图中的代码,它只是一个按钮,单击它时,我需要更改状态:

 <td class="border px-4 py-2">
                                <form  method="POST" action="{{route('users.status', $user)}}">
                                    @csrf
                                    <input type="hidden" name="_method" value="put"/>
                                    <button type="submit"
                                    class="{{ $user->is_active==1 ? "bg-green-500" : "bg-red-500" }} hover:bg-red-700 text-white font-bold py-1 px-1 rounded">
                                        {{$user->is_active==1 ? "Active" : "Inactive"}}
                                    </button>
                                </form>
                            </td>

点击上面的按钮后,给我这条消息:

User Updated successfully

但数据库中没有任何更新

首先,您要 User 从路由到控制器方法中获取哪个?您正在尝试将 User $user 对象注入控制器方法,但您没有在路由定义中指定 user 参数。

以及更新部分;设置 $user->is_active = 1; 后,您需要 运行 $user->save();

所以;您需要在路线中添加 user 参数:

Route::put('/users/{user}/status', [\App\Http\Controllers\dashboard\UsersController::class, 'status'])->name('users.status');

和 运行 save() 方法更新 $user ;

public function status(User $user)
{
    try {
        $user->is_active = 1;
        $user->save();
    } catch (\Exception $ex) {
        return redirect()->route('users.index')->with('status', "you couldn't update this record");
    }

    return redirect()->route('users.index')->with('status', 'User Updated successfully');
}

你应该叫 $user->save(); 而不是 $user->update();
另外,你可以调用$user->update(['is_active'=>1]);只用一行代码。