2016-09-21 75 views
0

我是laravel的新手。我正在使用循环工作将一些复选框值保存到数据库,但它只会将数组中的最后一个值保存到数据库中。将复选框值保存到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(); 

    } 
} 

是有没有其他办法可以做到这一点的作品?因为你创建的Resortfacility一个实例,然后在你自己的价值观填写并保存发生

回答

1

您的问题。问题是,每当你在一个循环中对这个对象进行修改,你就是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(); 
    } 
} 
+0

感谢那些工作!非常感谢 –

0

对方回答是正确的,但,批量插入可能会有所帮助,如创建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); 
相关问题