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