2015-06-30 36 views
1

我在Laravel應用程序中有一個jQuery數據表。我想通過使用複選框來確認其他人以前存儲的數據。當選中該複選框時,我想更新該記錄的屬性is_confirmed,值爲1(真)。現在我可以獲得我需要從數據庫中確認的所有記錄。但是,當我嘗試確認其中的一個時,即使爲什麼我沒有選中其他複選框,也會確認每條記錄。使用拉拉維爾雄辯中的jquery DataTable的複選框值

我想該錯誤是在下面的控制器更新方法:

public function update(Request $request) 
{ 
    $user = Auth::user(); 
    $is_validated = $request->get('is_validated'); 

    foreach ($is_validated as $valid_Id) { 
     if($valid_Id.value(1)) //<-here i suspect that the error is 
    { 
      DB::table('reports')->update(['is_validated' => 1, 'validated_by' => $user->id]); 
     } 
    } 
    return view('validate.update'); 
} 

我試圖用下面的代碼改變複選框的值。

$('.checkbox').change(function(){ 
    cb = $(this); 
    cb.val(cb.prop('checked')); 
    cb.value = 1; 
}); 

我使用單選按鈕也嘗試過,但是因爲它們都具有相同的名稱我只能在所有的記錄中選擇1個按鈕。

我被困在這一點,似乎我無法自己弄清楚。所有的幫助或提示表示讚賞。

回答

0

更新表格時,它將更新所有列,除非您將where()鏈接到末尾以僅選擇需要更新的記錄。您還需要爲每行可以更新的某種標識符,以便您只更新每次希望更新的行。

如果有很多行,那麼優化查詢也是一個好主意。目前它將爲其更新的每一行運行一次。理想情況下,你想拿出類似以下的東西...

// Reset is_validate fields to 0 
DB::table('reports')->update(['is_validated' => 0); 

// Reapply is_validate to each valid field. 
DB::table('reports')->update(['is_validated' => 1, 'validated_by' => $user->id])->whereIn('row_id', $request->get('row_ids')); 

這樣,你有2個查詢,而不是很多。