jQuery DataTable更新表的第一行而不是选定的行

时间:2015-07-01 12:32:14

标签: php laravel datatables

我有一个Laravel应用程序,我使用jQuery DataTables来更新一些记录。我从数据库中检索这些记录,我必须确认它们。在DataTable上,我在最后一列有一个复选框。

The DataTable

现在,当我选中复选框时,我可以从数据库更新记录,但更新的记录与复选框行上的记录不对应。这是在更新之前:

Selected Row in the DataTable

以下是记录更新后的内容:

enter image description here

正如您所看到的那样,更新了月份= 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/>';
            }
        }
    ]

1 个答案:

答案 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]);
        }
    }
}