【问题标题】:Export only selected rows into csv in Laravel在 Laravel 中仅将选定的行导出到 csv
【发布时间】:2021-06-13 13:18:18
【问题描述】:

我必须使用复选框仅将选定的行导出到 csv 这是我的代码。我正在使用 ajax 将多个用户 id 传递给控制器​​,但我不知道如何仅导出传递的用户 id 请帮助 问题是,它只是返回一个空的 excel 文件

导出 CSV 按钮

<a data-href="/admin/export/selected/data" class="btn btn-filter btn-secondary" id="export_records">Export
            Selected</a>

多选的 Ajax 代码

    <script>
    $(document).on('click', '#selectAll', function() {

        $(".user_checkbox").prop("checked", this.checked);
        $("#select_count").html($("input.user_checkbox:checked").length + " Selected");
    });
    $(document).on('click', '.user_checkbox', function() {

        if ($('.user_checkbox:checked').length == $('.user_checkbox').length) {
            $('#selectAll').prop('checked', true);
        } else {
            $('#selectAll').prop('checked', false);
        }
        $("#select_count").html($("input.user_checkbox:checked").length + " Selected");
    });
    $(document).ready(function() {
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

        $('#export_records').on('click', function(e) {
            var user = [];
            $(".user_checkbox:checked").each(function() {
                user.push($(this).data('user-id'));
            });
            if (user.length <= 0) {
                alert("Please select records.");
            } else {


                var selected_values = user;
                $.ajax({
                    type: "get",
                    url: "{{ route('export.csv') }}",
                    cache: false,
                    data: 'user_id=' + selected_values,
                    success: function(response) {

                        let _url = $("#export_records").data('href');
                        window.location.href = _url;
                    }
                });
            }

        });

    });

</script>

控制器下载 csv

 public function exportCsv(Request $request)
{
    $users = User::whereIn('id', explode(",", $request->user_id))->get();
    $filename = "UsersData.csv";
    $headers = array(
        'Content-Type' => 'text/csv',
        "Content-Disposition" => "attachment; filename=$filename",
        "Pragma"              => "no-cache",
        "Cache-Control"       => "must-revalidate, post-check=0, pre-check=0",
        "Expires"             => "0"
    );
    $callback = function() use($filename, $users) {
    $handle = fopen('php://output', 'w');
    fputcsv($handle, array('name','email', 'company_name','role', 'created_at'));

    foreach ($users as $user) {
            $row['name']  = $user->name;
            $row['email']    = $user->email;
            $row['company_name']    = $user->company_name;
            $row['role']  = $user->roles->name;
            $row['created_at']  = $user->created_at;
        fputcsv($handle, array($row['name'], $row['email'], $row['company_name'], $row['role'], $row['created_at']->format('l jS \of F Y')));
    }

    fclose($handle);
};
    

    return Response::stream($callback, 200, $headers);
}

注意 此代码适用于 csv 中的所有用户数据导出,例如 $users = User::all() 但不适用于选定的

ajax 响应

【问题讨论】:

  • 如果你 dd(); 不工作,$request->user_id 的值是多少;是吗?
  • 我只需要导出那些用复选框选中的数据
  • 检查上面的 ajax 响应部分的 $request->user_id this。

标签: php jquery ajax laravel export-to-csv


【解决方案1】:

尝试发送类似的数据

data: {user_id: selected_values}

而不是,

data: 'user_id=' + selected_values,

然后在后台不需要使用explode,直接获取用户id数组。

【讨论】:

  • 可以分享$request-&gt;user_id的值吗?
  • 您可以查看图片左侧上方的ajax响应部分
  • 我明白了。它应该可以工作...您可以尝试在后端执行 info($request-&gt;user_id) 并从 Laravel 日志文件中告知 $request-&gt;user_id 的值,以确保。
  • [2021-06-13 15:11:08] local.INFO: 数组 (0 => '25', 1 => '26', 2 => '27', 3 => '28', 4 => '24', 5 => '23', 6 => '22', 7 => '21', 8 => '20', 9 => '19', )
  • info($request->user_id) 返回一个数组?那应该是一个字符串,你是如何打印它的?在哪里?
【解决方案2】:

希望我得到了解决方案,我只是缺少带有 window.location.href 的 URL,我还必须将 user_id 传递给它。所以这里是修改的部分,

$.ajax({
      type: "GET",
       url: "{{ route('exportOption.Userscsv') }}",
       cache: false,
       data: 'user_id=' + selected_values,
       success: function(response) {
          let _url = $("#export_records").data('href');
          var selected_values = user;
          window.location.href = _url + '?user_id=' + selected_values;

                    }
           });

希望对大家有所帮助。

【讨论】:

    猜你喜欢
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2018-09-08
    • 2017-02-15
    • 2013-07-04
    • 2015-06-15
    • 1970-01-01
    相关资源
    最近更新 更多