【问题标题】:saving check box values to the database in laravel在 laravel 中将复选框值保存到数据库
【发布时间】:2017-01-29 15:39:21
【问题描述】:

我是 laravel 的新手。我正在使用循环将一些复选框值保存到数据库中,但它只会将数组中的最后一个值保存到数据库中。

这是我的表格

<form action="{{url('resortf')}}" method="post" enctype="multipart/form-data">
            <input hidden name="h_id" value="{{ $hotel->id}}">
            @foreach($facility as $facilities)
            <div class="col-md-4">
                <img src="{{$facilities->image}}" width="50px" height="50px;">
                <label>{{$facilities->name}}</label>
                <input type="checkbox" value="{{$facilities->id}}" name="facilities[]">
            </div>
            @endforeach
            <div class="row">
                <input type="hidden" name="_token" value="{{ csrf_token() }}">
                <input type="submit" class="btn btn-success" value="Next">
                <input type="reset" class="btn btn-success" value="Reset">
            </div>

        </form>

表格工作正常; $facilities 和 $hotel 是从控制器传递过来的。

这是存储功能

public function store(Request $request) {
    $resortfacility = new Resortfacility;
    $loop = $request->get('facilities'); 
    
    foreach ($loop as $value){
        $resortfacility->h_id = $request->get('h_id');
        $resortfacility->f_id = $value;
        
        $resortfacility->save();

    }
}

有没有其他方法可以做到这一点?

【问题讨论】:

    标签: php laravel checkbox


    【解决方案1】:

    您的问题出现是因为您创建了一个Resortfacility 实例,然后您填写其值并保存。问题是,每次您在循环中对此对象执行更改时,您都是 updating 现有对象,这就是为什么您的数据库中只有一条记录,即循环中的最后一条。

    尝试像这样在循环中创建新的 Resortfacility 实例:

    public function store(Request $request) {
        $loop = $request->get('facilities');
        foreach ($loop as $value){
            $resortfacility = new Resortfacility;
            $resortfacility->h_id = $request->get('h_id');
            $resortfacility->f_id = $value;
            $resortfacility->save();
        }
    }
    

    【讨论】:

      【解决方案2】:

      另一个答案是正确的,但是批量插入可能会有所帮助,因为在 foreach 循环中创建新对象将对每条记录进行查询。

           public function store(Request $request) 
           {
                   $facilities = $request->get('facilities');
                   $data=array();
                   foreach($facilities as $facility)
                   {
                       $data[] =[
                                  'f_id' => $facility,
                                  'h_id' => $request->get('h_id'),
                               ];                 
                   }
              }
      
       Resortfacility::insert($data);
      

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-08
        • 2017-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多