我正在导出mysql数据库数据到excel在laravel使用data网站。我搞不懂为什么我的文件是在点击按钮时下载的。这是我的代码。我得到了成功响应,但无法下载文件。我正试图通过点击按钮来下载excel文件。
ExportOrders.php
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use DB;
class ExportOrders implements FromCollection
{
/**
* @return \Illuminate\Support\Collection
*/
protected $fromDate, $toDate;
public function __construct(String $fromDate, String $toDate)
{
$this->fromDate = $fromDate;
$this->toDate = $toDate;
}
public function collection()
{
//
$orders = DB::table('orders')
->join('table_users', 'table_users.id', '=', 'orders.user_id')
->select('orders.*','table_users.name')
->whereBetween('orders_date', [$this->fromDate, $this->toDate])
->get();
return $orders;
}
}
控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ExportOrders;
class OrderController extends Controller
{
public function export_to_excel(Request $request)
{
$from_date = $request->from_date;
$to_date = $request->to_date;
return Excel::download(new ExportOrders($from_date, $to_date), 'orders.xlsx');
}
}
刀片代码
<div class="container" style="padding-bottom: 20px;padding-top: 20px;">
<div class="row">
<div class="col-sm-3">
<input type="date" class="form-control" name="from_date" id="from_date">
</div>
<div class="col-sm-3">
<input type="date" class="form-control" name="to_date" id="to_date">
</div>
<div class="col-sm-3">
<a type="submit" class="btn btn-info export_to_excel">Export to Excel</a>
</div>
<div class="col-sm-3">
<a type="submit" class="btn btn-info">Export to PDF</a>
</div>
</div>
</div>
</div>
脚本:
$(document).on('click', '.export_to_excel', function() {
var from_date = $('#from_date').val();
var to_date = $('#to_date').val();
$.ajax({
type: 'get',
url: '/export-to-excel',
data: {
'from_date': from_date,
'to_date': to_date
},
success: function(data) {
console.log(data);
alertify.set('notifier', 'position', 'bottom-center');
alertify.success(data.success);
}
});
});
发布于 2021-05-08 16:06:04
正如我所评论的,laravel excel库并不是用来和javascript一起使用的。如果你想在两种格式(excel,pdf)之间进行选择,你可以在一个表单中完成。
您可以添加第三个输入(例如<select>
或<input type="radio">
),让用户选择格式。
或者你可以给你的提交按钮命名。
最小路由和最小形式
Route::post('export', [OrderController::class, 'export'])->name('export');
<form action="{{ route('export') }}" method="post">
@csrf
<input type="date" id="from" name="from_date" onchange="$('#to').attr('min', this.value);" required>
<input type="date" id="to" name="to_date" onchange="$('#from').attr('max', this.value);" required>
<button type="submit" name="export_type" value="excel">Export to Excel</button>
<button type="submit" name="export_type" value="pdf">Export to PDF</button>
</form>
class OrderController extends Controller
{
public function export(Request $request)
{
if ($request->export_type === 'excel') {
return Excel::download(new ExportOrders($request->from_date, $request->to_date), 'orders.xlsx');
} elseif ($request->export_type === 'pdf') {
// return pdf download
} else {
// throw/log error
}
}
}
https://stackoverflow.com/questions/67445045
复制相似问题