将复选框值保存到laravel中的数据库

时间:2016-09-21 11:45:22

标签: php laravel checkbox

我是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();

    }
}

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

2 个答案:

答案 0 :(得分:2)

出现问题是因为您创建了一个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();
    }
}

答案 1 :(得分:-1)

另一个答案是正确的,但批量插入可能会有所帮助,因为在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);