Laravel PHP获取一个复选框值,并将其保存为一个极小的int

Laravel PHP获取一个复选框值,并将其保存为一个极小的int,php,laravel,forms,Php,Laravel,Forms,我在刀片视图中有一个表单,在包含复选框之前一直保存。 表单复选框: {{Form::label('o3','Option 3')} {{Form::checkbox('o3','',false,['class'=>'Form control med width'])} 控制器: $vote->choice3=$request->input('o3'); 我应该指出,我有3个复选框o1-o3,所有复选框都显示相同的内容,所有复选框都具有相同的格式 我得到了错误 SQLSTATE[23000]

我在刀片视图中有一个表单,在包含复选框之前一直保存。 表单复选框:


{{Form::label('o3','Option 3')}
{{Form::checkbox('o3','',false,['class'=>'Form control med width'])}
控制器:

$vote->choice3=$request->input('o3');
我应该指出,我有3个复选框o1-o3,所有复选框都显示相同的内容,所有复选框都具有相同的格式

我得到了错误

SQLSTATE[23000]:完整性约束冲突:1048列“choice3”不能为空(SQL:插入到“投票”中(“学生编号”、“姓氏”、“校园”、“choice1”、“choice2”、“choice3”、“更新的地点”、“创建的地点”)值(955555,测试,单身校园,2019-10-30 15:35:132019-10-30 15:35:13))


如果未选中复选框输入,则不会发送它们,这导致在控制器中恢复它们时,它们的值为
null
。您应该使用
input()
的第二个参数为它们设置默认值

$choice1=$request->input('o1',0);
$choice2=$request->input('o2',0);
$choice3=$request->input('o3',0);
如果浏览器未发送输入,则方法
input()
中的第二个参数表示默认值


或者将数据库中的
choice1
choice2
choice3
字段设置为空。

因为您将复选框值设置为空字符串,而Laravel有一个中间件,可以在请求时将空字符串转换为空字符串

因此,将第二个选项更改为
null


{{Form::label('o3','Option 3')}
{{Form::checkbox('o3',null,false,['class'=>'Form control med width'])}
并根据控制器中的复选框是打开还是关闭,将值设置为0或1(微小int)

$vote->choice3=$request->get('o3')='on'?1 : 0; 

希望这有帮助

`$request->get('o3')='on'?1 : 0;` for复选框与
$request->input('o3',0)相同
如果复选框的值为1是,但在Laravelth中不鼓励使用
$request->input
。有趣的是,您能给我发送一个链接,说明不鼓励使用的地方吗?您可能正在谈论非常不鼓励使用的
$request->all()
。您还会注意到,laravel文档中甚至没有
$request->get()
,他们在其中只使用
$request->input()
。这是因为
get()
在symfony请求类中,请参阅