【问题标题】:Laravel PHP Get a check box value saving to a tiny intLaravel PHP 获取一个复选框值保存到一个小整数
【发布时间】:2019-10-31 00:40:08
【问题描述】:

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

<div class="form-group col-md-2 col-4">
   {{Form::label('o3', 'Option 3')}}
   {{Form::checkbox('o3','',false,['class' => 'form-control med-width'])}}
</div>

控制器:

$vote->choice3 = $request->input('o3');

我应该评论说我有 3 个复选框 o1-o3 都显示相同的格式。

我得到错误

SQLSTATE[23000]:违反完整性约束:1048 列“choice3”不能为空(SQL:插入“投票”(“学生编号”、“姓氏”、“校园”、“选择 1”、“选择 2”、“ choice3', 'updated_at', 'created_at') 值 (955555, Test, Singleton Campus, ?, ?, ?, 2019-10-30 15:35:13, 2019-10-30 15:35:13))

【问题讨论】:

    标签: php laravel forms


    【解决方案1】:

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

    $choice1 = $request->input('o1', 0);
    $choice2 = $request->input('o2', 0);
    $choice3 = $request->input('o3', 0);
    

    方法input()中的第二个参数表示输入不是浏览器发送的默认值。

    或者使您的 choice1choice2choice3 字段在您的数据库中可以为空。

    【讨论】:

      【解决方案2】:

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

      所以把第二个选项改成null

      <div class="form-group col-md-2 col-4">
         {{Form::label('o3', 'Option 3')}}
         {{Form::checkbox('o3', null, false ,['class' => 'form-control med-width'])}}
      </div>
      

      根据控制器中的复选框是打开还是关闭,将值设置为 0 或 1(小整数)

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

      希望对你有帮助

      【讨论】:

      • ` $request->get('o3') === 'on' ? 1 : 0;` 如果复选框的值为 1,则复选框与 $request-&gt;input('o3', 0); 相同
      • 是的,但在 Laravel 中不鼓励使用 $request-&gt;input
      • 这很有趣,你能给我一个据说不鼓励的链接吗?您说的可能是$request-&gt;all(),强烈建议不要使用它。
      • 你还会注意到 $request-&gt;get() 甚至没有出现在 laravel 文档中,他们只使用了 $request-&gt;input()laravel.com/docs/master/requests
      • 那是因为get()在symfony请求类中,见this
      猜你喜欢
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2018-06-13
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2018-02-20
      相关资源
      最近更新 更多