【发布时间】:2021-12-11 19:31:56
【问题描述】:
我有一个页面,允许用户选择工作人员和日期范围(从和到)。然后,他们可以基于此过滤记录。我希望可以选择将数据导出为 Excel 格式,但是当我单击导出时,它会下载一个空白电子表格。谁能帮我在这里找到我的问题。
控制器:
public function exportvehicles(Request $request)
{
$startDate = $request->startDate;
$endDate = $request->endDate;
return Excel::download(new ExportV($startDate, $endDate), 'excelname.xlsx');
}
型号:
class ExportV implements FromQuery
{
/**
* @return \Illuminate\Support\Collection
*/
use Exportable;
protected $startDate;
protected $endDate;
function __construct($startDate,$endDate) {
$this->startDate = $startDate;
$this->endDate = $endDate;
}
public function query()
{
$startDate = request()->input('startDate', '2021-01-01');
$endDate = request()->input('endDate', '2021-12-12');
$data = VehicleLog::join('vehicle', 'vehicleslog.vehicle_id', '=', 'vehicle.id')
->join('smsstaff', 'vehicleslog.smsstaff_key', '=', 'smsstaff.smsstaff_key')
->when(request()->input('smsstaff_key'), function ($query) {
$query->where('smsstaff.smsstaff_key', request()->input('smsstaff_key'));
})
->whereDate('log_dt', '>=', $startDate)
->whereDate('log_dt', '<=', $endDate)
->get();
return $data;
}
}
查看:
<label>Pick a staff member</label>
<select name="smsstaff_key" id="smsstaff_key">
<option>----------------Select-----------------</option>
@foreach ($staff as $staffMember)
<option value="{{$staffMember->smsstaff_key}}" {{request()->input('smsstaff_key') === $staffMember->smsstaff_key ? 'selected="selected"' : ''}}>{{$staffMember->name}}</option>
@endforeach
</select>
<button class="btn btn-primary">Filter by selected staff member</button>
</div>
<div style="margin-left: 100px;">
<label>From:</label>
<input type="date" class="form-control" name="startDate" value="{{ $startDate }}">
</div>
<div style="margin-left: 150px;">
<label>To:</label>
<input style="width: 14em" type="date" class="form-control" name="endDate" value="{{ $endDate }}">
</div>
<a href="{{"/users/export/"}}" target="_blank" class="btn btn-primary">Export to Excel</a>
路线:
Route::get('users/export/', 'App\Http\Controllers\Admin\ReportController@exportvehicles');
【问题讨论】:
-
如果对查询执行 toSql,是否会从数据库中获取结果?
-
@Thomas 好的,我删除了
get()并导出了所有记录。有什么办法让它只导出过滤后的? -
尝试以表单形式提交您的输入。过滤不起作用,因为您将输入提交到应用程序
-
@ManojKiranAppathurai 我该怎么做?
-
能贴出导出操作的路由代码吗?
标签: php laravel laravel-8 maatwebsite-excel