从Laravel 5.4更新到5.7后,空复选框字段返回null而不是0

时间:2019-02-22 07:14:00

标签: php laravel

我最近将我的应用程序从laravel 5.4更新为5.7。更新后,我发现提交带有未选中复选框的表单时遇到以下错误:

  

SQLSTATE [23000]:违反完整性约束:1048列   'mature_enabled'不能为空

换句话说,不是返回 0

    Auth::user()->update([
        'mature_enabled' => $request->get('mature_enabled'),

在一个空白的复选框上返回。但是选中的复选框将返回 1

这是刀片中的字段:

    <div class="{{ $errors->has('mature_enabled') ? ' has-error' : '' }} settingsCheckbox"> 
        <label for="mature_enabled">Show mature content. Adults Only (18+).</label>
        <input type="checkbox" name="mature_enabled" value="1"
               @if (Auth::user()->mature_enabled  == 1)
               checked="checked"
               @endif
               >      
    </div>  

为什么会这样?自从更新Laravel之后,我什么都没有改变,所以我只能想象这是laravel问题。

1 个答案:

答案 0 :(得分:0)

  

为什么会这样?

由于Request::get的签名是get($key, $default = null),因此,如果未选中此复选框,则根本不会发送该复选框,并且get('mature_enabled')将返回null。 / p>

  

自从更新Laravel以来我什么都没有改变,所以我只能想象这是laravel问题。

实际上,不,Laravel的Request::get()只是称呼Symfony的那个,不建议使用它:

* This method belongs to Symfony HttpFoundation and is not usually needed when using Laravel.
*
* Instead, you may use the "input" method.

因此,您可以通过以下方式修改代码:

$request->input('mature_enabled', false)

或者,如果不使用验证,而您想确保它是布尔值:

!!$request->input('mature_enabled')