我在Laravel应用程序中有一个jQuery DataTable。我想通过使用复选框来确认其他人以前存储的数据。选中该复选框后,我想将该记录的属性is_confirmed
更新为值1(true)。现在我可以从数据库中获得所有需要确认的记录。然而,当我尝试确认其中一个时,每一条记录都会被确认,即使我不选中另一个复选框也是如此。
我猜错误是在下面的控制器更新方法中:
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;
});
我也尝试过使用单选按钮,但由于它们都有相同的名称,我只能在所有记录中选择一个按钮。
我被困在这一点上,似乎我无法独自解决。感谢所有的帮助或提示。
更新表时,它将更新所有列,除非将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个查询,而不是很多查询。