仅将选定的行导出到 Laravel 中的 csv
Export only selected rows into csv in Laravel
我必须使用复选框仅将 selected 行导出到 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 多个 select
的代码
<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()
但不适用于 selected 的
ajax 回应
尝试发送类似
的数据
data: {user_id: selected_values}
而不是
data: 'user_id=' + selected_values,
然后后台就不用explode了,直接得到用户id数组
希望我得到了解决方案,我只是缺少 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;
}
});
希望对大家有所帮助。
我必须使用复选框仅将 selected 行导出到 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 多个 select
的代码 <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()
但不适用于 selected 的
ajax 回应
尝试发送类似
的数据data: {user_id: selected_values}
而不是
data: 'user_id=' + selected_values,
然后后台就不用explode了,直接得到用户id数组
希望我得到了解决方案,我只是缺少 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;
}
});
希望对大家有所帮助。