如何在 Laravel 控制器中获取复选框值?

Mr.*_*ist 2 laravel laravel-6

我的表单中有一个复选框,我想将其值保存到数据库中。当我选中它时,它的值将为 1,当我取消选中它时,它的值将为 0。但是,在控制器中,我NULL总是得到。但为什么?没有的话可以解决吗jQuery

刀片/视图

<form action="{{ route('admin.categories.store') }}" method="POST" enctype="multipart/form-data">
    @csrf
    <div class="form-group>
       <label>
          <input type="checkbox" name="category_is_menu"
                 value="{{ old('category_is_menu', isset($category) ? 'checked' : '') }}"/>
       </label>
    </div>
    <input class="btn btn-success" type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)

控制器

public function store(Request $request)
{
    $category = new Category();
    $category->category_is_menu = $request->category_is_menu;

    return $category;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它给了NULLcategory_is_menu

N69*_*69S 7

在复选框输入之前添加一个带有负值的隐藏输入(与 name 属性中的值相同)

<div class="form-group">
    <input type="hidden" name="category_is_menu" value="0"/>
    <input type="checkbox" name="category_is_menu" value="1" {{ old('category_is_menu', isset($category) ? 'checked' : '') }}/>
</div>
Run Code Online (Sandbox Code Playgroud)

复选框输入中的值必须始终为 1。

未选中时,复选框输入不会在请求中发送,在这种情况下,隐藏的输入将以值 0 发送。当选中 Checkox 时,它将将该值覆盖为 1。


lag*_*box 6

要么使用其他答案中提到的隐藏输入技巧,要么只是检查输入是否已通过。如果它通过了,那么它就被检查了,如果它不存在,那么它就没有被检查:

$category->category_is_menu = $request->has('category_is_menu');
Run Code Online (Sandbox Code Playgroud)

如果已检查,则为 true,1;如果未检查,则为 false,0。