【问题标题】:laravel checkbox doesn't update to database laravellaravel 复选框不会更新到数据库 laravel
【发布时间】:2021-11-01 02:22:48
【问题描述】:

我想用一个复选框更新我的 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 POST 文件中获得复选框的值,那么你必须给它name="status" 而不是name="body"。
  • @AdrianKokot 我改了但问题还是一样
  • 另外,您不应该设置复选框的value 属性。 value 应该包含您希望复选框被选中时的值。
  • 你的模型是什么样子的?

标签: php laravel


【解决方案1】:

你应该在用户模型上添加状态属性到可填充数组

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

【讨论】:

  • 我已经这样做了
【解决方案2】:

首先在您的代码中,您有一些垃圾邮件(在控制器中)和一些语法错误(在 html 中)。

html

按钮中的额外&gt;,改为:

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

控制器

您不需要评估对新变量的验证,因为验证如果有错误会自动返回请求,因此您不需要 if 语句并且更新方法也接受数组作为输入,将您的代码更改为这个:

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

如果您的状态列(在数据库中)是布尔值,则您最常更改状态请求,因为选中的复选框值为on,而取消选中的复选框值为null,因此您最常使用此代码:

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

它会起作用,否则,请检查您的 model fillable 并将状态字段添加到其中:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2017-11-02
    • 1970-01-01
    相关资源
    最近更新 更多