我正在导出,我想使用 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/