我有一个Laravel应用程序,我使用jQuery DataTables来更新一些记录。我从数据库中检索这些记录,我必须确认它们。在DataTable上,我在最后一列有一个复选框。
现在,当我选中复选框时,我可以从数据库更新记录,但更新的记录与复选框行上的记录不对应。这是在更新之前:
以下是记录更新后的内容:
正如您所看到的那样,更新了月份= 3的记录而不是月份= 4的记录。
以下是控制器上的代码:
public function update(Request $request)
{
$user = Auth::user();
$is_validated = $request->get('is_validated');
$rec_id = $request->get('id');
$reports = [];
foreach($is_validated as $key => $valid){
$id = $rec_id[$key];
if(!empty($valid)){
$reports[] = DB::table('reports')->where('reports.id', $id)->update(['is_validated' => 1, 'validated_by' => $user->id]);
}else{
$reports[] = DB::table('reports')->where('reports.id', $id)->update(['is_validated' => 0, 'validated_by' => $user->id]);
}
}
}
感谢所有帮助或提示。
修改
我尝试重新排序列,并且数据表上的第一列已更新,无论它们的ID是什么。
编辑2
这是设置请求参数的javascript。
columns: [
{data: 'id', name: 'reports.id'},
{data: 'month', name: 'reports.month'},
{data: 'value', name: 'reports.value'},
{data: 'comment', name: 'reports.comment'},
{data: 'is_validated', name: 'reports.is_validated'},
],
"columnDefs": [ {
"targets": [0],
"render": function ( data, type, full, meta ) {
return '<input type="text" name="id[]" data-name"id-' + meta.row + '" value="'+data+'" class="hidden"/>';
}
},{
"targets": [4],
"render": function ( data, type, full, meta ) {
return '<input name="is_validated[]" data-name"is_validated-' + meta.row + '" class="checkbox" type="checkbox" unchecked/>';
}
}
]
答案 0 :(得分:1)
您的代码存在多个问题,但主要是浏览器为所有文本框发送id[]
个参数,但只发送包含已检查值的is_validated[]
个参数,因此两个数组的长度不同而您在PHP中错误地计算您的ID。
相反,您需要为每个复选框创建一个等于记录ID的值。在服务器端,您需要检查id[]
和is_validated[]
中是否存在这两个ID;如果是,则选中复选框,否则取消选中。
更正后的代码如下所示:
<强> JavaScript的:强>
columns: [
{
data: 'id',
name: 'reports.id',
"render": function ( data, type, full, meta ) {
return '<input type="text" name="id[]" data-name="id-' + meta.row + '" value="'+data+'" class="hidden"/>';
}
},
{data: 'month', name: 'reports.month'},
{data: 'value', name: 'reports.value'},
{data: 'comment', name: 'reports.comment'},
{
data: 'is_validated',
name: 'reports.is_validated',
"render": function ( data, type, full, meta ) {
return '<input name="is_validated[]" data-name="is_validated-' + meta.row + '" class="checkbox" type="checkbox" value="' + full['id'] + '"/>';
}
},
],
<强> PHP:强>
public function update(Request $request)
{
$user = Auth::user();
$is_validated = $request->get('is_validated');
$rec_id = $request->get('id');
$reports = [];
foreach($rec_id as $id){
if(in_array($id, $is_validated)){
$reports[] = DB::table('reports')->where('reports.id', $id)->update(['is_validated' => 1, 'validated_by' => $user->id]);
} else {
$reports[] = DB::table('reports')->where('reports.id', $id)->update(['is_validated' => 0, 'validated_by' => $user->id]);
}
}
}