我最近将我的应用程序从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问题。
答案 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')