[英]laravel checkbox doesn't update to database laravel
我想使用复选框更新我的 Laravel 项目中的用户状态。 如果我更改数据库中的值,它会显示在我的复选框中。 但是,如果我在我的网站中使用表单更改它,状态将保持不变。 我想我的控制器可能有问题。 有人可以帮忙吗?
在我看来:
<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>
在我的控制器中:
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();
}
我在 web.php 中的路由:
Route::get('/users', [UserController::class, 'index'])->name('users.index');
Route::patch('/change_status/{user}', [UserController::class, 'change_status'])->name('users.change_status');
您应该将 status 属性添加到 User 模型上的可填充数组
protected $fillable = ['status',...other properties];
首先在您的代码中,您有一些垃圾邮件(在控制器中)和一些语法错误(在 html 中)。
额外>
在按钮中,更改为:
<button type="submit" class="button is-link is-outlined" value="{{$user->status}}" >Update</button>
您不需要评估对新变量的验证,因为验证如果有 errorm 会自动返回请求,因此您不需要 if 语句并且 update 方法接受数组作为输入,将代码更改为:
$request->validate([
'status' => 'required',
]);
$user->update([$request->all()]);
如果你的状态栏(在databas)是布尔,你最更改状态请求,因为上选中该复选框值on
和取消选中为null
,所以你最使用此代码:
$request->validate([
'status' => 'required',
]);
if(isset($request->status)){
$status = true;
}else{
$status = false;
}
$user->update([
'status' => $status,
]);
这将是可行的,否则,请检查您的模型可填充并将状态字段添加到其中:
protected $fillable = ['status',...];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.