【问题标题】:how to save checkbox value in array form?如何以数组形式保存复选框值?
【发布时间】:2018-01-17 17:59:56
【问题描述】:

如何将多个复选框值保存到数据库中?现在该值存储在不同的行中。示例:我选择了值 1 和 2。所以 1 行中的值 1 和另一行中的值 2。

刀片

  <form enctype="multipart/form-data" action="/report/{{$postqs->id}}" 
     method="POST"> 

   <input type="checkbox" name="item[]" value="one" />1
   <input type="checkbox" name="item[]" value="two" />2
   <input type="checkbox" name="item[]" value="three" />3


 <div class="row">
<div class="form-group">
<label class="control-label col-sm-2"> Others:</label>
<div class="col-sm-7">
 <textarea name="report" id="report" class="form-control"></textarea>
 </div>
 </div>
 <input type="hidden" name="_token" value="{{ csrf_token() }}">
 <input type="submit" class="pull-right btn btn-sm btn-primary">
 </div></div></div>

</form>

报告模型

protected $fillable = ['report','postqs_id','user_id','item'];

存储控制器:

   public function store(Request $request,Postqs $postqs,$id,Report $report, 
   Admin_report $admin_report)
{

    foreach ($request->input("item") as $key=>$value){
        $add_item = new Report;
         $add_item->item= $value;
         $add_item->user_id= Auth::user()->id;
         $add_item->postqs_id=$id;
         $add_item->save();

        return back();

    }

【问题讨论】:

  • dd($request->input("item")) 它给了你什么以及究竟发生了什么,你是否正在使用此代码将任何数据保存到数据库。
  • array:2 [▼ 0 => "one" 1 => "two" ] 如果我选中复选框并收到此错误,这就是我得到的结果:SQLSTATE[HY000]:一般错误: 1364 字段'user_id'没有默认值(SQL:插入reportitemupdated_atcreated_at)值(一,2018-01-17 08:08:02, 2018- 01-17 08:08:02))
  • 我在数据库中有 report、item、user_id、postqs_id 字段。报告和项目默认值为空。如果我删除 foreach 我可以保存报告,user_id,postqs_id 但如果我添加 foreach 以保存复选框值,则显示该错误。

标签: php database laravel checkbox


【解决方案1】:

您应该将项目作为键和值分开,以便您可以保存值并且它给您的错误表明它需要 user_id,因此将 user_id 添加到它。您的代码应该如下所示:

foreach ($request->input("item") as $key=>$value){
       $add_item = new Report;
        $add_item->item= $value;
        $add_item->user_id= Auth::user()->id;
        $add_item->postqs_id=$id;
        $add_item->save();
}

因为您想要复选框的值,而不是键。以您的方式,它将键和值一起保存在项目列中。

#更新

在这种情况下(将数组保存到数据库中),您不会将项目输入放入 foreach 循环中,而是将其保存为原样,在此之前您必须告诉模型将其视为数组,方法是放入 $casts属性到报告模型中:

protected $casts = [
        'items'=>'array',
    ];

这样它应该作为数组保存到项目列中。之后,您只需保存如下代码所示的项目:

        $add_item = new Report;
        $add_item->item= $request->input("item");
        $add_item->user_id= Auth::user()->id;
        $add_item->postqs_id=$id;
        $add_item->save();

请注意,在这种情况下不需要 foreach 循环。

【讨论】:

  • SQLSTATE[23000]:完整性约束违规:1048 列“postqs_id”不能为空(SQL:插入reportitemuser_idpostqs_idupdated_atcreated_at) 值(三、5、、2018-01-17 08:20:16、2018-01-17 08:20:16))我现在收到此错误。即使我在 foreach 中添加了这段代码: $add_item->postqs_id=postqs->id
  • @kavi 首先你应该写代码写 $add_item->postqs_id=$postqs->id,你错过了 $ 符号第二你通过 Url 传递 $postqs->id 作为 $id。你应该写 $add_item->postqs_id=$id
  • @kavi 是否解决了问题?
  • user_id 已修复,现在 postqs_id 出现问题。
  • @kavi 向我们准确展示您现在拥有的代码。更新您的问题并向我们展示您更新的代码。并在其后写下错误。
【解决方案2】:

看来您需要添加user_id 才能插入新的Report

$user = auth()->user();


foreach ($request->input("item") as $item){
    $add_item = new Report;
    $add_item->user_id= $user->id;
    $add_item->item= $item;
    $add_item->save();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2017-12-29
    相关资源
    最近更新 更多