繁体   English   中英

laravel 复选框不会更新到数据库 laravel

[英]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 中)。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM