javascript - 导出 1 和导出多个为 .csv (laravel 5.3)

标签 javascript php laravel csv export

我正在导出,我想使用 2 个按钮,一个用于仅导出一条记录,另一个用于导出由复选框选择的多条记录。我能够在导出方法中获取 id,但不知道如何从数据库中提取数据并将其放入 csv 文件中。

这是我的方法(适用于单记录导出)

public function getExport($id, Request $request)
{
    $student = Students::find($id);
    $name = $student->name . ".csv";
    $temp = tmpfile();
    $heading = array('Name', 'Group');

    fputcsv($temp, $heading, );

    $values = array($student->name, $student->group);

    fputcsv($temp, $values, );
    fseek($temp, 0);
    echo fread($temp, 1024);
    header('Content-Type: text/csv; charset=utf-8');
    header("Content-Disposition: attachment; filename=" . $name);
    fclose($temp);
    die;
}

此方法的链接

<a href="/student/getExport/{{ $stuent->id }}">Export It</a>

路线

Route::get('/student/getExport/{id}', 'StudentController@getExport');

到目前为止,它是导出一条记录

现在,对于多记录导出,我有一个 JavaScript 函数,它可以获取需要导出的 ID。

多条记录导出链接

<a href="javascript:;" onclick="exportAll();"> Export Students  </a>

javascript方法

function exportAll() {
    var students = $('input:checkbox:checked').map(function () {
        return this.value;
    }).get();
    $.ajax({
        type: "GET",
        url: '/student/getExport/' + students,
        data: {
            ids: students
        },
        success: function (result) {
            if (result == 'export') {
                window.location.href = "/smtp";
            }
        }
    });
}

通过此方法,我在 getExport 方法中获取所选记录的 id。

提示此代码适用于单个和多个记录删除,但不知道如何将其用于导出。

public function destroy($id, Request $request)
{
    if (empty($request->input('ids')))
    {
        $student = Students::findOrFail($id);
        $student->delete();
    }
    else
    {
        $ids = $request->input('ids');
        $Student = Students::whereIn('id', $ids);
        $student->delete();
        session()->flash('msg', trans('Deleted successfully.'));
    }
    return 'delete';
}

请帮助我如何在同一方法 getExport 中实现多条记录的导出。

谢谢

最佳答案

您必须使用get方法代替find,然后您必须循环它以附加到您的csv文件中。

这是我从之前的answer修改而来的代码.

public function getExport($id)
{
    $data = Students::whereIn('id', explode(',', $id))
        ->get();
    $filename = "students.csv";
    $handle = fopen($filename, 'w+');
    fputcsv($handle, array('name', 'class', 'section'));
    foreach ($data as $student)
    {
        fputcsv($handle, array($student->name, $student->class, $student->section));
    }
    fclose($handle);

    $headers = array(
        'Content-Type' => 'text/csv',
    );

    return \Response::download($filename, 'students.csv', $headers);
}

关于javascript - 导出 1 和导出多个为 .csv (laravel 5.3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40625843/

相关文章:

Javascript删除数组中的连接项

javascript - Photoshop Javascript - 尝试创建新文本图层时出现语法错误

javascript - 如何更改html5 Canvas 线的起点和终点位置?

php - 按添加日期对文件进行排序 Laravel PHP

php - 在 Laravel 中使用 Eloquent 通过 Foreach 循环反转数组元素的顺序

laravel - 如何在 Laravel 中使用 Vue 路由器?

javascript - 向 API 发送请求以接收 JSON 并将其作为原始 JSON 文本附加到文档中

php - 有限制地排队 Guzzle 请求

PHP:从递归函数返回一个数组

javascript - 使用 Ajax 在 PHP 中发表评论