2016-09-21 69 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); 
相關問題