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请求类中,请参阅