php - laravel checkbox doesn't update to database laravel

I want to update the user status in my laravel project with a checkbox. If I change the value in the database it show's up on my checkbox. But if I change it with in my website with a form the status remains the same. I think something might be wrong with my controller. Can someone help?

In my view:

<form action="{{ route('users.change_status', $user) }}" class="form" method="post">
    {{ csrf_field() }}
    @method('PATCH')
    <label>body</label>
    <input type="checkbox" class="form-control" name="status" value="{{$user->status}}" @if($user->status) checked @endif>
    <div class="form-group">
        <button type="submit" class="button is-link is-outlined" value="{{$user->status}}" >>Update</button>
    </div>
</form>

In my controller:

    public function change_status(Request $request, User $user)
        {
            //dd($user);

            // Validate posted form data
            $validated = $request->validate([
                'status' => 'required',
            ]);

            if (!$validated) { return redirect()->back();}
            $user->update($request->all());

            return redirect()->back();

        }

And my routes in web.php:

Route::get('/users', [UserController::class, 'index'])->name('users.index');
Route::patch('/change_status/{user}', [UserController::class, 'change_status'])->name('users.change_status');

Answer

Solution:

You should add status property to fillable array on User model

protected $fillable = ['status',...other properties]; 

Answer

Solution:

First in your code you have some spams(in controller) and some syntax error (in html).

html

Extra > in button, change to this:

<button type="submit" class="button is-link is-outlined" value="{{$user->status}}" >Update</button>

controller

You dont need to assessment the validation to an new varaible, because the validation if has errorm automaticly return back the request, so you don't need the if statement and also the update method accepts array as input, change your code to this:

$request->validate([
                'status' => 'required',
            ]);
    $user->update([$request->all()]);

if your status column(in databas) is boolean, you most change the status request, because the checkbox value on checked is on and on uncheck is null so you most use this code:

$request->validate([
                'status' => 'required',
            ]);
    if(isset($request->status)){
        $status = true;
    }else{
        $status = false;
    }
    $user->update([
        'status' => $status,
    ]);

It's will be work, else, check your model fillable and add the status field to that:

protected $fillable = ['status',...]; 

Source